Tomcat和SSL客户端证书

时间:2012-07-20 11:04:58

标签: tomcat ssl

我想有以下情况:

  1. 创建我自己的CA
  2. 创建服务器证书并使用我的CA签名
  3. 创建多个客户端证书并使用我的CA签名
  4. 接下来,我想验证每个提供由我的CA签名的证书的客户。

    是否可以在不将每个客户端证书添加到我的tomcat密钥库的情况下实现此类方案?我只想验证客户提供的证书是否由我的CA签发并签名。

2 个答案:

答案 0 :(得分:7)

是的,这当然是可能的,我已经做到了这一点。如果使用包含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" />

答案 1 :(得分:-1)

你应该看看openSSL:http://openssl.org/ 或者,如果您想免费获得现有CA(但每月必须这样做),请执行以下操作:http://www.startssl.com/