环境:Windows 2008 R2 上的 Tomcat 7.0
要完成什么
让 Tomcat 7.0 使用带有随附证书链的特定通配符证书,这样客户的浏览器就不会抛出错误。提供的证书是通配符证书。这是不可协商的,与安装证书无关。
我的问题是,除了主证书之外,我无法让 tomcat 使用链(根证书)。
我尝试过的方法
一开始,我花了很长时间才让证书与提供的密钥对一起工作。参考文献 2 和 3 向我展示了以下步骤,将提供的密钥对导入为 Tomcat 更喜欢的“PrivateKeyEntry”:
#on a CentOS server cuz easier than getting a windows tool for it
openssl pkcs12 -export -in wildcard-customer-2016.crt -inkey wildcard-customer-2016.key -out wildcard-customer-2016.p12 -name wildcard -CAfile rapidssl.crt -caname root
#back on windows
C:\Program Files\Java\jre7\bin\keytool -importkeystore -deststorepass tomcat -destkeystore c:\.keystore -srckeystore c:\certificate\wildcard-customer-2016\wildcard-customer-2016.p12 -srcstoretype PKCS12 -alias wildcard
但我不知道如何添加根证书以便它也使用它。您可以看到我用于构建 .p12 文件的命令包含一个 CAfile 命令。使用“-trustcacerts”运行 importkeystore 命令时不会添加根证书,尽管它确实适用于 *.customer.com 证书。
可能的替代方案
有人能解释一下如何配置server.xml
才能正确使用 APR 吗?假设我不知道 zip 文件中的文件放在哪里。(参考文献 4)
参考
答案1
我使用以下步骤来实现这一点
- 包含未加密私钥的 HOSTNAME.key
- HOSTNAME.cer 包含公共证书 + CA 链。
$HOSTNAME 应该是主机的 FQDN(对于别名而言,在步骤 2 和 3 中很重要)。
openssl pkcs12 \
-export \
-out $HOSTNAME.pfx \
-inkey $HOSTNAME.key \
-in $HOSTNAME.cer
然后使用 $HOSTNAME.pfx
keytool -importkeystore \
-srckeystore $HOSTNAME.pfx \
-srcstoretype pkcs12 \
-srcstorepass pazzword \
-destkeystore $HOSTNAME.jks \
-deststoretype JKS \
-deststorepass pazzword \
-srcalias 1 \
-destalias $HOSTNAME
最后在 Tomcat 的 server.xml 中
keystoreFile="/etc/tomcat7/security/$HOSTNAME.jks"
keystorePass="pazzword"
keyAlias="$HOSTNAME"
truststoreFile="/etc/tomcat7/security/mastercert.jks"
truststorePass="changeit"
最后一部分(信任库)是如果您需要 Tomcat 信任额外的 CA,那么在您的设置中可能不需要它。因此,密钥库是服务器证书所在的位置,信任库是服务器将信任的对象(如果您想要进行相互认证等)。