是的,这是完全可能的,并且我已经做过了。如果您配置了一个信任库(truststore),其中包含您的 CA 证书,则 Tomcat 应接受由该 CA 签名的任何客户端证书。
我假设您已经生成了 CA 密钥和根证书,并知道如何使用它将 CSR 转换为证书。
首先生成您的服务器密钥和相应的 CSR。
$ openssl genrsa -out XXX.key 2048
$ openssl req -new -nodes -key XXX.key -out XXX.csr
使用您的CA证书对CSR进行签名,生成服务器证书
XXX.crt
。现在将服务器密钥、服务器证书和CA证书打包到一个单独的PKCS#12文件中。
$ cat XXX.crt ca-certificate.pem | openssl pkcs12 -export -inkey XXX.key -out XXX.p12 -name tomcat -caname myauthority
在这个过程中,您需要输入几个密码,请将它们全部设置为相同的值(这个值并不重要,也不必是安全密码,只需要非空即可-我使用changeit
)。
现在,这个.p12
文件可以作为Tomcat的密钥库。接下来,您需要创建一个单独的JKS密钥库,其中仅包含用作信任库的CA证书。
$ keytool -import -alias myauthority -keystore truststore.jks -file ca-certificate.pem
请再次使用相同的非空密码回复所有密码提示,例如changeit
。
最后,您可以配置Tomcat:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
connectionTimeout="20000"
keystoreFile="${catalina.home}/conf/XXX.p12"
keystoreType="PKCS12"
keystorePass="changeit"
truststoreFile="${catalina.home}/conf/truststore.jks"
truststoreType="JKS"
truststorePass="changeit"
clientAuth="true" sslProtocol="TLS" />