使用自签名证书部署Spring Boot应用程序(包括中间CA)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用自签名证书部署Spring Boot应用程序(包括中间CA)相关的知识,希望对你有一定的参考价值。
我是一个初学者,所以我正在寻找更多的解释而不是快速修复。
我正在尝试通过HTTPS部署Spring Boot应用程序(为了好玩/测试,永远不会将其投入生产)。我首先创建一个证书颁发机构(root和中介),然后为我的应用程序创建一个证书(将通过localhost访问)并使用中间CA签署此证书。我使用this教程来做到这一点。
然后我使用this回答将我新创建的localhost证书导入密钥库,然后通过应用程序进行部署。通过Chrome访问时,我遇到了两个问题;
- 主题备选名称缺失。此站点的证书不包含包含域名或IP地址的主题备用名称扩展名。
- 证书错误。站点的证书链存在问题(net :: ERR_CERT_AUTHORITY_INVALID)。
如果我对问题的理解是正确的,我需要做以下事情;
- SAN是某种证书扩展,它已成功使用与域名匹配的公用名。我需要将此扩展注入我的localhost证书。我的问题是,我不知道我必须在哪里这样做。是在创建证书吗?
- 我不确定为什么会这样。从一端我觉得这将永远发生,因为我的CA是我创建的而不是已建立的CA,但从我在网上看到的这可以解决,但我不明白如何。我刚刚将我的localhost证书注入密钥库。我是否还需要注入中间证书?
另外,我对上面的教程有疑问。 server_cert和usr_cert之间的区别是什么(在Sign server and client certificates部分下)。证书是服务器的证书,但它将处理用户身份验证。在那种情况下,我需要使用server_cert吗?
回答我自己的问题,因为我似乎已经弄明白了。
首先,您需要创建根CA和中间CA.如前所述,我遵循了this教程。这是非常好的,但有一些事情要强调。
- 创建根
openssl.cnf
时,请确保将目录设置为root/ca
文件夹的位置。这在说明书中有详细说明,但最好强调一下。同时更改默认值(第81-86行),以便在执行根CA时找到它们。 - 创建根证书时,请选择一个好的通用名称
- 在创建中间
openssl.cnf
时,将目录更改为root/ca/intermediate
并更改默认值默认值(第81-86行)以匹配根openssl.cnf
。 - 另外,作为openssl.cnf的一部分,您需要根据this链接添加subjectAltName。在
usr_cert
和server_cert
下添加subjectAltName = @alt_names
。这将在创建证书时添加所需的主题备用名称。我相信你真的只需要这个server_cert
,但我加入它只是为了安全(我没有使用user_cert
)。DNS.1
正确设置为localhost。 - 在创建中间证书时,您的详细信息应与根证书的详细信息相同,因此我说在步骤3中复制组织详细信息。通用名称必须不同。
- 在创建服务器证书时,您的组织详细信息可能非常小心,但要将公共名称设置为
localhost
。 - 验证签名服务器证书时,检查版本是否设置为3(在数据下),主题CN设置为
localhost
,X509v3 Subject Alternative Name
设置为DNS:localhost
。
完成后,您需要创建一个信任存储来提供给Sring Boot应用程序。我使用了this资源的一部分。我使用以下命令创建了我的证书链
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适用于这种格式。
此时我使用KeyStore Explorer检查我的密钥库是否具有正确的层次结构。它有一个证书(localhost),当我查看证书层次结构时,我看到了root - > intermediate - > localhost。
接下来我做的是把密钥库放在src/main/resources
下,我在我的YAML属性文件中添加了以下属性(一个普通的.properties文件也可以工作)
server.port: 8443
server.ssl:
key-store: src/main/resources/cert-chain.p12
key-store-password: secretpassword
keyStoreType: PKCS12
如果您使用的是Spring Security,则可能还需要使用security.require-ssl: true
。
在这一点上,你将展示一个ERR_CERT_AUTHORITY_INVALID
,但无论如何你都可以继续。这是因为您的浏览器不信任您的Root / Intermediate CA.如果您通过浏览器查看证书,则应再次看到root - > intermediate - > localhost层次结构。将中间证书导入浏览器并重新启动浏览器。你现在应该看到一个绿色的安全挂锁。成功!你现在安全了!
注意:有时我看到Active content with certificate errors
错误。在这种情况下,删除网站存储,如here所述。
以上是关于使用自签名证书部署Spring Boot应用程序(包括中间CA)的主要内容,如果未能解决你的问题,请参考以下文章
具有有效证书的spring boot https获取ERR_SSL_VERSION_OR_CIPHER_MISMATCH,自签名工作正常
我可以使用自签名证书在测试环境中部署 microsoft bot