11

我在 Windows 机器上的独立 tomcat 6 服务器上运行应用程序。我希望它能够从 DoD CAC 卡请求和接收客户端证书。

我有一台运行 IE 的客户端计算机,它正确设置以从 CAC 卡传递证书,我知道它是正确的,因为当我转到启用 CAC 的站点时,IE 会弹出一个窗口,要求我选择一个证书,然后在该窗口中我看到我的 CAC 卡中的证书。

我已将 tomcat 配置为向用户请求证书,当我导航到在 tomcat 上运行的站点时,我看到相同的 IE 提示,要求我选择我的证书,但是当我查看我的站点时,证书列表为空。在我的 server.xml 文件中,我将连接器配置如下:

<Connector port="8443" 
           protocol="HTTP/1.1" 
           SSLEnabled="true"
           maxThreads="150" 
           scheme="https" 
           secure="true"
           keystoreFile="<myKeysotre>"
           keystorePass="<myPassword>"
           clientAuth="want" 
           sslProtocol="TLS" />

我认为我搞砸的地方是密钥存储文件的生成。现在我已经使用 java keytool 命令生成了它,如下所示:

keytool -genkey -alias -keypass myPassword -keystore myKeystore -storepass myPassword

我现在正在进行开发,我正在寻找一种方法将客户端证书从 CAC 卡获取到我的应用程序,但我错过了一些东西。我不太熟悉它的工作原理,所以我可以使用一些帮助/指导。

谢谢

4

1 回答 1

11

在拉了一点头发后,我发现了。IE 提示我选择我的证书为空的原因是因为客户端证书(CAC 卡上的证书)不是由我的 tomcat 服务器上受信任根目录中的任何 CA 颁发的。

我需要做的是将根 CA 证书添加到我的 tomcat 信任库中。我花了一段时间才弄清楚如何获得证书。我所做的是访问http://dodpki.c3pki.chamb.disa.mil/rootca.html网站并下载根证书(以 .cac 文件的形式出现),然后将这些文件导入 IE(工具-> Inernet 选项-> 内容-> 证书)。然后,再次从 IE 证书工具中)我将根证书导出为 X509 文件并创建了一个信任库来包含它们:

keytool -storepass somePassword -import -alias DoDClass3RootCA -keystore my.truststore -trustcacerts -file exports\DoDClass3RootCA.cer

创建该存储后,我会更新 server.xml 文件中的 Connector 元素以包含该信任存储:

<Connector port="8443" 
           protocol="HTTP/1.1" 
           SSLEnabled="true"
           maxThreads="150" 
           scheme="https" 
           secure="true"
           truststoreFile="my.truststore"
           truststorePass="somePassword"
           … />

完成此操作并重新启动 tomcat 后,CAC 卡证书出现在我面前

于 2010-10-14T16:26:22.147 回答