如何使用通过Java keytool与Nginx生成的SSL证书?

我使用Java keytool来生成一个“keystore”:

keytool -genkey -alias example.com -keyalg RSA -keystore example.com.keystore 

然后我生成了一个CSR(证书签名请求):

 keytool -certreq -keyalg RSA -alias example.com -file example.com.csr -keystore example.com.keystore 

然后我颁发了一个证书,并将其保存在一个文本文件example.com.crt

现在我想用Nginx的这个证书。

我已将证书放在/etc/ssl/certs/example.com.cert并在/etc/ssl/certs/example.com.cert放置了我的“密钥库”(我认为它包含我的私钥?)

然后我configuration了Nginx, Nginx,SSL和vhosts 。 但是当我重新加载Nginx的configuration文件,我得到这个错误消息:

 sudo service nginx reload Reloading nginx configuration: [emerg]: SSL_CTX_use_certificate_chain_file("/etc/ssl/certs/myssl.crt") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib) configuration file /etc/nginx/nginx.conf test failed 

当我遵循相同的指南,并使用openssl生成SSL证书,它工作正常。 但使用Java的keytool我得到这个错误。

我如何使用Nginx的Java密钥工具使用SSL证书和密钥?

据我所知,你不能用任何非Java写的密钥库。 用keytool提取密钥也是不可能的。

我build议使用http://www.openssl.org/docs/HOWTO/keys.txt或OpenVPN中包含的easy-rsa tools来生成一个新的密钥/证书组合,默认情况下会生成采用nginx可读的格式。

如果从密钥库中提取密钥非常重要,那么在http://conshell.net/wiki/index.php/Keytool_to_OpenSSL_Conversion_tips上有关于如何提取密钥的指南。