我有一个运行嵌入式Tomcat服务器的Spring Boot(2.2.2.RELEASE)应用程序,并打包为可执行的jar文件,该文件当前支持现有域(wildcard.old-domain.com)和ssl证书。目标是重新配置该应用程序,使其也支持新域(wildcard.new-domain.com)和ssl证书。
这可能吗?如果是这样,为支持新域,建议对配置和/或代码进行哪些更改?假定(CA签名的)SSL证书是分开的(即,具有两个域名的单个证书,在证书的“主题备用名称”属性中,这是一个简单的解决方案,不选项)。
基本上,我有一个包含两个私钥项的密钥库:
$ keytool -list -keystore keyStore.p12
Enter keystore password:
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 2 entries
wildcard.old-domain.com, Oct 17, 2018, PrivateKeyEntry,
Certificate fingerprint (SHA1): ...
wildcard.new-domain.com, Feb 28, 2020, PrivateKeyEntry,
Certificate fingerprint (SHA1): ...
包含我的application.properties文件条目:
server.ssl.key-store-type=PKCS12
server.ssl.key-store=${user.dir}/keyStore.p12
server.ssl.key-store-password=?
重新启动应用程序后,预期的结果是能够访问Web浏览器中的应用程序端点,并且不会遇到任何证书警告:
https://dev.old-domain.com/hello
https://dev.new-domain.com/hello
这对于在密钥库文件中首先列出的域(wildcard.old-domain.com)成立。另一个域(wildcard.new-domain.com)会产生证书警告:
BrowserX does not trust this site because it uses a certificate that is not valid for dev.new-domain.com. The certificate is only valid for *.old-domain.com.
Error code: SSL_ERROR_BAD_CERT_DOMAIN
此外,如果我在application.properties文件中指定域别名,我也可以访问新域而不会发出任何证书警告:
server.ssl.key-alias=wildcard.new-domain.com
但是随后我收到了另一个域的证书警告。
此外,似乎应用程序正在通过 org.apache.tomcat.util.net.SSLUtilBase 类中的以下方法来处理私钥:
@Override
public KeyManager[] getKeyManagers() throws Exception {}
但是,我不确定是否有可能甚至建议尝试覆盖Spring Boot在幕后所做的事情。
此外,希望该应用程序支持多个域的原因是我们正在重新命名我们的URL,并希望最终用户的迁移过程尽可能轻松。