【问题标题】:How do PEM and DER certificates work in openSSL?PEM 和 DER 证书如何在 openSSL 中工作?
【发布时间】:2013-12-21 19:28:32
【问题描述】:

我建立了一个可以获取 http 请求并发送响应的服务器。此外,我想使用客户端程序通过https协议发送http请求。

我生成一个PEM证书文件,格式如下:

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

当我尝试使用指令将证书导入 JVM 时:

keytool -import -file E:\server.pem -alias CERT -keystore "C:\Program Files\Java\jre7\lib\security\cacerts"

它有一个错误:

java.lang.Exception: Input not an X.509 certificate

我搜索了异常,发现原因可能是 keytool 只能接受 BEGIN CERTIFICATE 和 END CERTIFICATE 之间的 PEM 格式。

所以我使用openSSL将PEM转换为DER,然后可以将它导入JVM。

我的问题是为什么我必须将带有私钥的证书导入到我的 JVM?在 SSLHandshake 的过程中,不应该将公钥证书导入到我的 JVM 中吗?

我知道这可能是一个非常基本的问题,但我无法完全理解它是如何工作的。

非常感谢:)

【问题讨论】:

    标签: java ssl openssl certificate ssl-certificate


    【解决方案1】:

    因此,Openssl 支持将私钥和证书存储在同一个文件中。你已经做到了。您可以简单地将私钥块拉入与开始证书块分开的自己的文件中。当 OpenSSL 读取 PEM 格式证书时,它将忽略私钥块。当它读取 PEM 格式的私钥时,它将忽略证书。如果您想要一个包含密钥和证书的文件,这很方便。 你的网络服务器需要知道它的私钥,尽管它永远不应该将它的私钥发送给客户端。它需要将其证书发送给客户端。

    【讨论】:

    • 如果只有证书,客户端如何加密公钥中的数据?谢谢。
    • 假设您使用的是 http,请查看 hc.apache.org/httpclient-3.x/sslguide.html 除非您使用的是自签名 verts,否则您不需要做太多(任何事情)
    【解决方案2】:

    由于您的服务器拥有私钥,它有权将公钥发送给客户端,然后客户端可以使用该公钥与服务器进行安全通信。

    http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html

    【讨论】:

    • 我只将证书部分导入JVM。如何通过公钥加密数据?我没有公钥。谢谢。
    • 假设您使用的是 http,请查看 hc.apache.org/httpclient-3.x/sslguide.html 除非您使用的是自签名 verts,否则您不需要做太多(任何东西)
    • 我使用 httpsUrlconnection 传输数据,并使用密钥库实现 SSLSocketFactory。在我的情况下似乎没有使用公钥/私钥,但是如何加密数据?谢谢。
    • 据我了解,您不需要加密数据,如果是 SSL 连接,它将为您完成。
    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 2018-12-28
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多