- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我最近接手了一个执行文档数字签名的文档最少的项目,我收到了一个让我有点困惑的更改请求。
该应用程序基于 Java,使用 Java keystore (JKS) 并使用指定为命令行操作的别名的私钥对输入文档进行数字签名。这一切对我来说似乎相当简单,但是变更请求让我感到困惑。
客户端请求能够使用“Windows” keystore (更具体地说,据我所知,与个人证书相关的 Windows-MY keystore )。现在,我最初的假设是客户请求的东西根本不可能,因为这个 keystore 将只包含证书,不能用于以任何身份签署文档。我是不是不正确,或者 Windows-MY keystore 是否只包含公共(public)证书?我不相信私钥会嵌入其中一个证书中。
不幸的是,存在一些沟通困难,所以我想在继续之前确保我的推理是正确的。
这里有一些更多的证据来支持我的案例(来自客户的沟通):
创建 Windows Key Store(从 Java Keystore 导出)步骤在这里 -
生成RSA key
keytool -genkey -alias mykey -keyalg RSA -keystore my.jks -keysize 2048
从上述 keystore 导出证书:
keytool -export -alias mykey -file mykey.crt -keystore my.jks
Enter keystore password: temp123
Certificate stored in file <mykey.crt>
在 windows keystore 中安装上述证书。
一个。双击“mykey.crt”并点击安装证书
选择“Place all certificates in the following store”单选按钮并单击“Browse”按钮将其添加到 windows 证书存储中。C。在 Windows 我的商店中查看此证书。
除非我错了,否则 keytool 只会生成证书类型而不是实际的公钥/私钥对?
任何帮助甚至肯定将不胜感激,对于问题不明确表示歉意,但不幸的是,这就是我目前所要做的。Java 或 Windows 特定的答案会有所帮助,但即使只是确认基本原则也会受到赞赏。
提前致谢
最佳答案
也许您想看一下 Oracle 的文档 [ 1 ] 在 SunMSCAPI
提供程序上,可用于访问存储在 Windows-MY
(个人)和 Windows-ROOT
中的证书和 key (受信任的根证书颁发机构)存储。
还有一小段代码,看起来很符合你的需求:
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 store 包含证书和私钥,两者都可以使用 SunMSCAPI
提供程序从 Java 中读取,并可用于签署数字文档。
关于Windows keystore 和证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13697934/
当我在工作区执行 certsign.sh 脚本时,出现以下错误 jarsigner 错误:java.lang.RuntimeException: keystore 加载:无效的 keystore 格式
如何: 生成 keystore 生成信任库 为了让 SSL 在客户端和服务器之间工作,我只需要 的帮助使用终端命令(Keytool 和 openssl)生成用于相互身份验证的 keystore 和信任
keystore 和信任库之间有什么区别? 最佳答案 keystore 包含私钥以及证书及其相应的公钥。 信任库包含来自您希望与之通信的其他方的证书,或来自您信任的可识别其他方的证书颁发机构的证书。
我已经尝试使用命令 keytool -import -keystore *.jks -alias alias_name -keypass alias_passwd -file *.x509.pem`
我试图找出.keystore文件和.jks文件之间的区别,但我找不到它。我知道 jks 代表“Java keystore”,两者都是存储键/值对的一种方式。 使用其中一种与另一种相比有什么区别或偏好吗
我有一个包含多个客户端证书的 Java keystore 文件。我希望在我的 Java 应用程序中仅选择这些证书之一来连接到服务。有没有简单的方法可以做到这一点?到目前为止,我找到解决方案的唯一方法是
我想知道是否有一种方法可以检测程序是在默认(调试) keystore (从 eclipse 运行时)还是在签名 keystore (发布到 Android 市场时)上运行 我在我的应用程序中使用谷歌地
我是Java世界的新手,虽然使用NetBeans代码创建Web应用程序工作正常,直到执行get方法,但当我试图执行SQL查询时,glassfish无法显示来自MSQL DB的数据并给出错误。我正在使用
在 Azure 管道中有以下任务 AzureResourceManagerTemplateDeployment@3 从 ARM 模板部署 Key Vault 然后,AzurePowerShell@5
我正在使用以下命令使用 OpenSSL 创建 keystore : openssl pkcs12 -export -in mycert.crt -inkey mykey.key \
在 Azure 管道中有以下任务 AzureResourceManagerTemplateDeployment@3 从 ARM 模板部署 Key Vault 然后,AzurePowerShell@5
我使用下面的代码尝试加载 keystore 文件,但收到 java.io.IOException: 无效的 keystore 格式异常。关于如何解决此问题或导致问题的原因有什么想法吗? 加载 keys
我目前正在评估 Artifactory Pro 版本的 jar 签名功能。我正在按照此处找到的手册进行操作:https://www.jfrog.com/confluence/display/RTF/W
当我尝试将证书添加到 Keystore 时,我遇到了一个奇怪的错误。 System.out.println(x509Certificate.getPublicKey()); // prints pub
作为加密和保存数据的一部分,我们使用 AES 算法和 openssl 生成了 key 。 openssl enc -aes-256-cbc -P -nosalt Openssl 已生成 KEY 和 I
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: I lost my .keystore file! 我丢失了在 Market 上发布的 Android 应用
我不小心删除了我的应用程序的 .keystore 文件,但我仍然有用于生成 .keystore 文件的 Keystore 密码。有什么方法可以使用密码恢复该文件吗? 最佳答案 不,这不可能。一旦你失去
我正在访问一个 https URL,证书已添加到我的应用程序 keystore 属性中。 但是,目标 https URL 的证书最近发生了变化。 我们不想重新编译代码并使用更新后的 keystore
所以我有一个应用程序,允许用户使用 HTTPS 配置服务器。服务器使用 Undertow。要向 Undertow 添加 HTTPS 处理程序,我需要调用 Keystore.getInstance("J
这个问题在这里已经有了答案: Truststore and Keystore Definitions (7 个答案) 关闭 6 年前。 我有一个 PKCS#12我将其视为 keystore 文件,因
我是一名优秀的程序员,十分优秀!