java - PEM 和 DER 证书如何在 openSSL 中工作?

标签 java ssl openssl certificate ssl-certificate

我搭建了一个可以获取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/

相关文章:

spring-boot - javax.net.ssl.SSLException : handshake timed out in corda node

java - 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?

java JIT——可以进行哪些优化?

java - 尝试检查 arraylist 是否是另一个的子集

apache - 具有自签名证书的 Tomcat 应用程序在 Chrome 浏览器中导致 ERR_CERT_AUTHORITY_INVALID

php - 使用 SSL 显示 JSON 数据页面的内容

c++ - C++ 中的短消息 AES 性能

email - 通过 gmail 从地址欺骗

ssl - 您如何与证书颁发机构签署证书签名请求?

java - 如何使用 Intellij 解决 Java 中的 fileNotFoundException