我有一个 nginx 服务器,它可以转发来自 子域的请求ropi.io
。我想使用 SSL 保护连接,因此我生成了一个证书,调用ropi.pem
并将其添加为ssl_certificate
和 ,ssl_certificate_key
因为我使用 OpenSSL 生成了它,其中密钥和证书都是这个单个文件。
当浏览器客户端想要连接到服务器时,它可以正常工作,但在某些情况下,我确实需要使用 Java 客户端进行连接。问题是 Java Keystore 无法导入.pem
文件,因此我再次使用 OpenSSL 将其转换为.der
Keystore 接受的格式。
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
但是,这并不能解决问题,因为我遇到了同样的异常,所以我仍然无法从 Java 客户端连接到服务器。
是否存在一种 Nginx 和 Java Keystore 都可以使用且适用于域、CN 等的通用格式?
就 SSL 认证而言,我是个新手,但我决心学习,所以请对我有耐心。
答案1
我找到了解决方案:我必须从密钥文件创建一个证书,并明确说明我想要的域名(它会告诉生成时需要它的位置)。
我使用openssl req -x509 -sha256 -nodes -days 365 -key ../nginx/ropi.pem -out certificate.crt
命令,确保将正确的文件添加到正确的密钥库,一切就绪