java - 将 PEM 文件转换为 .JKS 密钥存储和信任存储文件
问题描述
来自服务器端的 PEM 文件,打开时格式如下:
-----BEGIN CERTIFICATE-----
somestuff1234
-----END CERTIFICATE-----
我正在尝试将其转换为获取两个 JKS 文件(信任库和密钥库),我可以通过 SSL 使用我的 java 应用程序调用服务器。
任何人都可以帮助轻松分解如何使用 openssl 然后使用 java 密钥库来做到这一点?我尝试按照以下说明进行操作:https ://docs.oracle.com/cd/E35976_01/server.740/es_admin/src/tadm_ssl_convert_pem_to_jks.html
但我无法成功导入密钥库,因为某种原因它是空的。PS,当我按照这些说明创建 PKSC12 时,我没有输入私钥,因为我没有提供私钥。
我是否需要使用我自己也需要创建的私钥,但由于我只获得了证书,所以不确定是否需要它?我被告知中间证书是在 TLS 握手中发送的。
感谢您对此的任何帮助。
解决方案
如果该 PEM 文件中的唯一内容是您发布的内容:
-----BEGIN CERTIFICATE-----
somestuff1234
-----END CERTIFICATE-----
您将无法创建适合用作接受连接的 TLS 服务器的完整密钥库。
为此,您需要与证书对应的私钥。
我是否需要使用我自己也需要创建的私钥,但由于我只获得了证书,所以不确定是否需要它?
否 - 除了其识别数据,您的证书中还有一个公钥。整个证书由您的 CA 加密签名 - 这就是“信任”转移到您的证书的方式。证书中的公钥是从特定的私钥派生的。
为什么它不起作用?因为使用证书中的公钥加密的数据只能使用派生公钥的私钥解密。
只有与正确的私钥配对时,您的证书才有效。
但:
我从 der 创建了 PKSC12,但没有输入私钥,因为我没有提供私钥。
您必须拥有私钥和证书才能运行 TLS 服务器。*
编辑:
出于同样的原因,在连接到 TLS 服务器时,您必须将正确的私钥与您的证书配对,才能将其用作客户端证书。
此外,TLS 证书是公开的——如果你只需要证明你的身份,那么公开它就会使它毫无用处。您拥有适当的私钥就是证明该证书是您的证书而不是我的或其他任何人的证书。
在您为您拥有的证书找到正确的私钥之前,您的 TLS 服务器或与 TLS 服务器的客户端连接将无法正常工作。如果您或您的组织丢失了该私钥,您必须创建一个新的私钥并完成从该新私钥创建新证书的过程。
因为没有正确的私钥,你现在拥有的证书是完全没用的。
* - 技术上不正确。TLS 标准确实支持不需要任何证书或私钥的“匿名”密码套件。但几乎没有应用程序支持匿名密码套件。例如,如果您自己从源代码编译,OpenSSL 仅支持匿名密码套件。
推荐阅读
- java - 如何验证网址是否正确
- time - SSRS 格式时间字段不带冒号
- glsl - GLSL 在 GLSL ES 中的转置替代方案?
- reactjs - Redux 传奇:使用 yield call() 和 async/await 有什么区别?
- python - 如何从嵌套列中提取json到数据框
- java - 即使手机连接到互联网,改造也会出现“无互联网”错误
- pandas - python panda中引用类型列表的排序问题
- if-statement - 如何将列表的元组与值进行比较?
- php - 在没有 ON CASCADE 的情况下准备多行 PHP 代码中的语句
- java - 可以帮我在java中执行sql