Java不发送客户端证书

时间:2013-12-24 14:20:57

标签: java ssl apache-httpclient-4.x jsse

我在Java 1.7上使用HttpClient 4.2.3连接到由nginx托管的远程服务器。我的组织广泛使用PKI,远程和客户端都拥有由公共CA颁发的证书。

服务器有一个如下所示的签名链:

CN=Server 123, OU=Servers, OU=My Division, O=My Org, C=US
CN=My Division CA, OU=My Division, O=My Org, C=US
CN=My Org CA, O=My Org, C=US

客户端的签名链如下:

CN=Client 456, OU=Servers, OU=My Division, O=My Org, C=US
CN=My Division CA, OU=My Division, O=My Org, C=US
CN=My Org CA, O=My Org, C=US

由于某种原因,客户端不会将其证书提供给服务器。服务器配置正确(例如,使用--cert, - key和--cacert卷曲)。客户端在密钥存储区中具有其证书,私钥和签名链,并且在其信任存储中具有“我的部门CA”和“我的组织CA”证书(以及其他)。启用S​​SL调试后,我可以看到密钥存储和信任存储加载成功。客户端可以连接到正确请求证书的其他服务器。但是,当尝试连接到“服务器123”时,我看到如下内容:

*** ServerHello, TLSv1
...
** TLS_RSA_WITH_AES_256_CBC_SHA
...
*** Certificate chain
...
***
Found trusted certificate:
...
*** CertificateRequest
Cert Types: RSA, DSS
Cert Authorities:
<CN=My Division CA, OU=My Division, O=My Org, C=US>
<CN=My Org CA, O=My Org, C=US>
<CN=Some Other CA, OU=Some Division, O=My Org, C=US>
...
*** ServerHelloDone
...
*** Certificate chain
***
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1
...
HTTP/1.1 400 Bad Request
...
No required SSL certificate was sent
...

最令人困惑的部分是,使用相同软件的其他客户端提供证书并且可以正常连接。

我已正确配置了所有基础架构(据我所知),此应该工作。我确实不想编写和维护自定义SSL代码来修复此问题。

0 个答案:

没有答案