客户端证书不会发送到服务器

时间:2014-03-11 12:59:03

标签: tomcat ssl ssl-certificate authentication

我正在尝试为在JBoss 4.2.3上运行的SOAP Web服务设置双向SSL身份验证。我们为此目的创建了一个CA,它具有根CA和两个中间CA-s(开发和生产环境)。

然而,尝试使用由其中一个CA-s签名的客户端证书来测试此设置时,我遇到了问题。

服务器设置为JVM-s cacerts密钥库中的根CA和Tomcat连接器用作信任库的密钥库中的相关中间CA.完整的Connector配置如下:

<Connector port="443" address="${jboss.bind.address}"
           protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="true" sslProtocol="TLS"
           keystoreFile="keystore.p12"
           keystorePass="******" keystoreType="PKCS12"
           emptySessionParth="true" enableLookups="false" acceptCount="100"
           truststoreFile="truststore.jks"
           truststorePass="******" truststoreType="JKS"
           disableUploadTimeout="true" />

openssl s_client连接我可以看到,&#34;可接受的客户端证书CA名称&#34;列出我们的中间CA.我还在-cert-key选项中提供了正确的客户端证书和密钥。但是,据我所知,openssl输出,永远不会发送证书。我还尝试将客户端证书,中间CA和根CA连接到一个PEM文件中,以呈现整个链,但这也没有帮助。

s_client命令行如下:

openssl s_client -host localhost -port 443 -cert client_cert.crt -key client_key.key -CApath /etc/ssl/certs/ -debug -state

当我尝试使用Google Chrome和Windows中安装的相关证书测试服务时,也会观察到相同的行为。 wireshark输出看起来相同 - 请求证书,显示正确的可接受CA,但浏览器甚至从未给我选择证书,并且空的客户端证书消息被发送回服务器。

所以我的问题是 - 我在这里错过了什么?我假设客户端应该使用可接受的CA列表来决定要发送哪些证书,但显然有些事情正在做出决定,否则就不会发送证书。我再次假设服务器配置正确,因为预期的CA是在协商中发送的,但我在客户端缺少什么?

编辑:

根据要求@Bruno,我还查看了证书的密钥用法。当使用openssl x509 -noout -text -in client.cer

打印时,当前使用的客户端证书会提供以下信息
        X509v3 Basic Constraints: critical
            CA:FALSE
        X509v3 Key Usage: critical
            .....
        X509v3 Extended Key Usage: 
            TLS Web Client Authentication

现在看一下 - 空的Key Usage字段似乎是罪魁祸首。应该有什么价值?我似乎无法找到谷歌获取此类信息的好词。我可能不得不查看CA管理软件。

1 个答案:

答案 0 :(得分:0)

感谢@Bruno给出的提示,我调查了客户端证书的关键用法部分。事实证明,我们正在生成具有空密钥用法属性的证书。

我现在已经配置了我们的CA管理软件,以生成具有以下密钥用法/扩展密钥用法属性的证书。我承认我并不完全明白,每个人都做了什么,但它使系统现在正常运作。希望我在这里没有添加任何有潜在危险的东西。

        X509v3 Key Usage: critical
            Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
        X509v3 Extended Key Usage:
            TLS Web Client Authentication

在谷歌上搜索有关密钥使用位的信息之后,我也偶然发现了this question,它解释了一些事情。