Java 使用自签名证书(包括中间CA)部署Spring Boot应用程序
我是一个初学者,所以我希望更多的解释,而不是快速修复 我正在尝试通过HTTPS部署Spring Boot应用程序(为了好玩/测试,永远不会投入生产)。首先,我创建了一个证书颁发机构(root和intermediate),然后为我的应用程序创建了一个证书(将通过localhost访问),并使用中间CA对该证书进行签名。我用教程来做这个 然后,我使用answer将新创建的本地主机证书导入密钥库,然后由应用程序部署。当通过Chrome访问时,我遇到了两个问题Java 使用自签名证书(包括中间CA)部署Spring Boot应用程序,java,spring,ssl,https,ssl-certificate,Java,Spring,Ssl,Https,Ssl Certificate,我是一个初学者,所以我希望更多的解释,而不是快速修复 我正在尝试通过HTTPS部署Spring Boot应用程序(为了好玩/测试,永远不会投入生产)。首先,我创建了一个证书颁发机构(root和intermediate),然后为我的应用程序创建了一个证书(将通过localhost访问),并使用中间CA对该证书进行签名。我用教程来做这个 然后,我使用answer将新创建的本地主机证书导入密钥库,然后由应用程序部署。当通过Chrome访问时,我遇到了两个问题 缺少主题替代名称。此站点的证书不包含包含域
另外,我有一个关于上述教程的问题。服务器证书和usr证书之间的区别是什么(在签名服务器和客户端证书部分下)。证书是服务器的证书,但它将处理用户身份验证。在这种情况下,我需要使用服务器证书,对吗?回答我自己的问题,因为我似乎已经解决了这个问题 因此,首先需要创建根CA和中间CA。如前所述,我遵循了教程。这是非常好的,但有一些事情要强调
openssl.cnf
时,请确保将目录设置为root/ca
文件夹的位置。这在说明中有详细说明,但最好突出显示。还要更改默认值(第81-86行),以便在执行根CA时可以找到它们openssl.cnf
时,将目录更改为root/ca/intermediate
,并更改默认值(第81-86行)以匹配根openssl.cnf
usr\u cert
和server\u cert
下添加subjectAltName=@alt\u names
。这将在创建证书时添加所需的使用者备选名称。我相信您只需要在服务器\u证书
中使用它,但为了安全起见,我在这两个证书下都添加了它(反正我没有使用用户\u证书
)<代码>DNS.1已正确设置为本地主机localhost
localhost
,而X509v3主题备选名称设置为DNS:localhost
cat ./intermediate/certs/localhost.cert.pem ./intermediate/certs/intermediate.cert.pem ./certs/ca.cert.pem > cert-chain.txt
openssl pkcs12 -export -inkey ./intermediate/private/localhost.key.pem -in cert-chain.txt -out cert-chain.p12
然后,我使用以下命令创建了我的存储
cat ./intermediate/certs/localhost.cert.pem ./intermediate/certs/intermediate.cert.pem ./certs/ca.cert.pem > cert-chain.txt
openssl pkcs12 -export -inkey ./intermediate/private/localhost.key.pem -in cert-chain.txt -out cert-chain.p12
我没有费心把它转换成JKS,因为pkcs12是新的标准,Spring Boot可以很好地使用这种格式
在这一点上,我然后用来检查我的密钥存储是否具有正确的层次结构。它有一个证书(localhost),当我查看证书层次结构时,我看到了root->intermediate->localhost
我做的下一件事是将密钥库放在src/main/resources
下,并在YAML属性文件中添加了以下属性(普通的.properties文件也可以使用)
如果您使用的是Spring Security,您可能还需要使用Security.require-ssl:true
此时,您将看到一个ERR\u CERT\u AUTHORITY\u INVALID
,但您仍然可以继续。这是因为您的浏览器不信任您的根/中间CA。如果通过浏览器查看证书,您应该再次看到根->中间->本地主机层次结构。将中间证书导入浏览器并重新启动浏览器。您现在应该看到一个绿色的安全挂锁。成功!你现在安全了
注意:有时我看到一个带有证书错误的
活动内容。在本例中,请按说明删除站点存储。我通过向我的服务器证书扩展添加一个扩展名(多亏了此资源;