Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java未发送客户端证书_Java_Ssl_Apache Httpclient 4.x_Jsse - Fatal编程技术网

Java未发送客户端证书

Java未发送客户端证书,java,ssl,apache-httpclient-4.x,jsse,Java,Ssl,Apache Httpclient 4.x,Jsse,我正在使用Java1.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=Se

我正在使用Java1.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 *** 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 ... CN=服务器123,OU=服务器,OU=我的部门,O=我的组织,C=美国 CN=我的部门CA,OU=我的部门,O=我的组织,C=美国 CN=我的组织CA,O=我的组织,C=美国 客户端有一个签名链,如下所示:

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 *** 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 ... CN=客户端456,OU=服务器,OU=我的部门,O=我的组织,C=美国 CN=我的部门CA,OU=我的部门,O=我的组织,C=美国 CN=我的组织CA,O=我的组织,C=美国 由于某些原因,客户端不向服务器提供其证书。服务器配置正确(例如,curl使用--cert、-key和--cacert工作)。客户机在密钥存储中有其证书、私钥和签名链,在其信任存储中有“我的部门CA”和“我的组织CA”证书(以及其他证书)。启用SSL调试后,我可以看到密钥存储和信任存储成功加载。客户端可以连接到正确请求证书的其他服务器。但是,当尝试连接到“服务器123”时,我看到如下情况:

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 *** 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 ... ***你好,TLSv1 ... **TLS_RSA_与_AES_256_CBC_SHA ... ***证书链 ... *** 找到受信任的证书: ... ***证书申请 证书类型:RSA、DSS 核证机关: ... ***海龙石 ... ***证书链 *** ***ClientKeyExchange,RSA PreMasterSecret,TLSv1 ... HTTP/1.1400错误请求 ... 未发送所需的SSL证书 ... 最令人困惑的是,使用相同软件的其他客户机提供了证书,并且可以很好地连接


据我所知,我已经正确配置了所有的基础设施,这应该可以正常工作。我真的不想编写和维护自定义SSL代码来修复此问题。

请注意,客户端正在发送一个空的CertificateChain。这意味着它找不到与CertificateRequest中表示的约束匹配的证书。客户端是否有RSA或DSS证书?所有有问题的证书都是RSA。您能否确认基于SSL的服务器配置为需要或需要客户端证书?(我认为CertificateRequest日志表明)服务器被明确配置为需要(RSA)证书,非Java客户端只有在发送(有效、可信)证书时才能连接。@DaveG服务器发送CertificateRequest的事实已经证实了这一点。