PEM和DER证书如何在openSSL中运行?

时间:2013-12-05 02:15:37

标签: java ssl openssl certificate ssl-certificate

我构建了一个可以获取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中吗?

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

非常感谢:)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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