我搭建了一个可以获取http请求并发送响应的服务器。此外,我想使用客户端程序通过https协议(protocol)发送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: 输入不是 X.509 证书
我搜索了异常,发现原因可能是 keytool 只能接受 BEGIN CERTIFICATE 和 END CERTIFICATE 之间的 PEM 格式。
所以我用openSSL把PEM转换成DER,然后导入JVM。
我的问题是为什么我必须将带有私钥的证书导入到我的 JVM 中?在SSLHandshake过程中,我不应该将公钥证书导入我的JVM吗?
我知道这可能是一个非常基本的问题,但我无法完全理解它是如何工作的。
非常感谢:)
最佳答案
由于您的服务器拥有私钥,因此它有权将公钥发送给客户端,然后客户端可以使用该私钥与服务器进行安全通信。
参见 http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html
关于java - PEM 和 DER 证书如何在 openSSL 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20390138/