如何从openssl生成的密钥中生成X.509证书

时间:2018-06-25 22:52:11

标签: spring-boot ssl nginx openssl keytool

我有一个在ec2实例上运行的Web服务器,该实例内部调用使用Spring Boot构建的REST服务器。现在,我正在尝试使此REST服务器在SSL下运行。到目前为止,这是我所做的:

1)使用此命令创建了CSR和密钥文件

openssl req -newkey rsa:2048 -nodes -keyout mydomain.key -out mydomain.csr

2)Copied 'csr' to get SSL certificate from GoDaddy.

3)在我的ec2-instance上的Nginx下成功安装了证书。

4)当我点击https下的主页时,它可以工作。我不再从浏览器收到“不安全”消息。

5)登录失败,因为它发出了REST调用,但REST服务器未在SSL下运行,因此我试图使其在SSL下运行。

6)运行以下命令:

keytool -import -alias mydomain -keystore tomcat.keystore -trustcacerts -file mydomain.com.chained.crt
keytool -import -alias mydomain-key -keystore tomcat.keystore -trustcacerts -file mydomain.key

上一条命令给我一条错误消息: “ keytool错误:java.lang.Exception:输入的不是X.509证书”

但这是在上面的步骤1中创建的文件,并且同一文件在Nginx下工作。我缺少什么(除了我对设置SSL知之甚少的事实以外)?我相信,我需要第二条命令在application.properties中指定“ server.ssl.keyAlias”的值。

2 个答案:

答案 0 :(得分:2)

不是真正的答案,但评论过多。

您无需“生成” X.509证书;您已经从GoDaddy获得了。如果(且仅)以与(外部)nginx相同的名称访问SpringBoot服务器(我不清楚),您需要转换对私钥和证书链从PEM格式到Java使用的格式。参见:
How to import an existing x509 certificate and private key in Java keystore to use in SSL?
How can I set up a letsencrypt SSL certificate and use it in a Spring Boot application?
How to use .key and .crt file in java that generated by openssl?
Importing the private-key/public-certificate pair in the Java KeyStore
也许Import key and SSL Certificate into java keystore

答案 1 :(得分:0)

感谢@ Dave_thompson_085。以下2条命令可以解决问题!

openssl pkcs12 -export -in mydomain.com.chained.crt -inkey mydomain.key -out keystore.p12 -name my-alias -caname root

keytool -importkeystore -deststorepass mypassword -destkeypass mypassword -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass mypassword -alias my-alias

,然后在application.properties中,我指定了以下属性:

server.port=8443
server.ssl.enabled=true
security.require-ssl=true
server.ssl.key-store=/etc/nginx/ssl/keystore.jks
server.ssl.key-store-password=mypassword
server.ssl.keyStoreType=JKS
server.ssl.keyAlias=my-alias