加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows密钥库和证书

发布时间:2020-12-14 04:37:30 所属栏目:Windows 来源:网络整理
导读:我最近继承了一个项目,其中包含执行文档数字签名的最少文档,我收到了一个让我感到有些困惑的变更请求. 该应用程序是基于Java的,并且使用Java Keystores(JKS)并使用指定为命令行操作的别名的私钥来对输入文档进行数字签名.这一切对我来说都相当简单,但是变更
我最近继承了一个项目,其中包含执行文档数字签名的最少文档,我收到了一个让我感到有些困惑的变更请求.

该应用程序是基于Java的,并且使用Java Keystores(JKS)并使用指定为命令行操作的别名的私钥来对输入文档进行数字签名.这一切对我来说都相当简单,但是变更请求让我感到困惑.

客户端已请求使用“Windows”密钥库(更具体地说,就我所知,与个人证书相关的Windows-MY密钥库).现在,我最初的假设是客户端请求的内容根本不可能,因为此密钥存储区将只包含证书,这些证书不能用于以任何身份签署文档.我不正确,或者Windows-MY密钥库是否只包含公共证书?我不相信私钥会嵌入其中一个证书中.

不幸的是,有一些沟通困难,所以我想确保我的推理是正确的,然后继续进行.

以下是支持我案例的更多证据(来自客户的沟通):

创建Windows密钥库(从Java密钥库导出)步骤在这里 –

>生成RSA密钥

keytool -genkey -alias mykey -keyalg RSA -keystore my.jks -keysize 2048

>从以上密钥库导出证书:

keytool -export -alias mykey -file mykey.crt -keystore my.jks

 Enter keystore password:  temp123

 Certificate stored in file <mykey.crt>

>在Windows密钥库中安装上述证书.

一个.双击“mykey.crt”并单击“安装证书”

湾选择“将所有证书放在以下商店中”单选按钮,然后单击“浏览”按钮将其添加到Windows证书库中.
C.在WindowsMy商店中检查此证书.

除非我错了,否则keytool只生成证书类型而不是实际的公钥/私钥对?

任何协助甚至肯定都会受到高度赞赏,对于问题缺乏明确性表示道歉,但不幸的是,这是我现在必须处理的全部内容.
Java或Windows特定的答案将有所帮助,但即使只是确认基本原则将不胜感激.

提前致谢

解决方法

您可能希望查看SunMSCAPI提供程序上的Oracle文档[ 1],该文档可用于访问存储在Windows-MY(个人)和Windows-ROOT(受信任的根证书颁发机构)存储中的证书和密钥.

还有一些代码片段,它似乎非常合理地满足您的需求:

KeyStore ks = KeyStore.getInstance("Windows-MY");
    // Note: When a security manager is installed,// the following call requires SecurityPermission 
    // "authProvider.SunMSCAPI".
    ks.load(null,null); 

    byte[] data = ...
    String alias = "myRSA";

    PrivateKey privKey = (PrivateKey) ks.getKey(alias,null);
    Certificate cert = ks.getCertificate(alias);

    Provider p = ks.getProvider();
    Signature sig = Signature.getInstance("SHA1withRSA",p);
    sig.initSign(privKey);
    sig.update(data);
    byte[] signature = sig.sign();
    System.out.println("tGenerated signature...");
    sig.initVerify(cert);
    sig.update(data);
    if (sig.verify(signature)) {
       System.out.println("tSignature verified!");
    }

总结:Windows-My商店包含证书和私钥,两者都可以使用SunMSCAPI提供程序从Java读取,并可用于签署数字文档.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读