汤姆猫和SSL客户端证书

4
我希望实现以下场景:
  1. 创建自己的CA
  2. 创建一个服务器证书并使用我的CA对其进行签名
  3. 创建多个客户端证书并使用我的CA进行签名
接下来,我想验证每个客户端是否提供了由我的CA签发的证书以进行身份验证。
是否可以在不将每个客户端证书添加到我的tomcat密钥库中的情况下实现这种情况? 我只想验证客户端提供的证书是否由我的CA颁发和签名。
3个回答

9

是的,这是完全可能的,并且我已经做过了。如果您配置了一个信任库(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" />

1
此外,如果您不知道如何处理CA,可以查看这个链接(包括链接工具的评论):最困难的部分是管理方面。 - Bruno

0

免责声明:仅在开发环境中使用自签名根证书。

有关更完整的概述(逐步):

Create a root certificate
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365

Create a key and CSR
openssl genrsa -out mycert.key 2048
openssl req -new -nodes -key mycert.key -out mycert.csr

Sign the CSR with your root certificate
openssl x509 -req -in mycert.csr -CA cert.pem -CAkey key.pem -CAcreateserial -out mycert.pem

Create a PKCS#12 certificate with the cert and key
openssl pkcs12 -export -out mycert.p12 -inkey mycert.key -in mycert.pem

Create a separate JKS keystore containing just the CA certificate (to use as the truststore)
keytool -import -alias my-ca -keystore truststore.jks -file cert.pem

这适用于Ian Roberts的Tomcat配置。


-1

1
这是针对客户端证书的。在使用普通的互联网 PKI 用于身份验证服务的客户端证书的情况极少,而且只有极少数情况是合适和明智的。 - Falcon Momot
也许只有在您拥有一个空气隙网络并将两台机器连接在一起而不是连接到互联网时,才需要这样做。 - Anonymous Type

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接