有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中具有自签名证书的PHP SoapClient

我们需要连接的一个WS具有PHP中的示例代码。 他们是为我们签名的。。。现在我们有了私钥和认证证书

他们建议将私钥和签名证书两者放在一起。pem文件,在PHP中有如下代码:

$client = new SoapClient('https://www.example.com/api/server.php?wsdl', array('local_cert' => "custom-pc.pem", "trace"=>1));
$result = $client->Login();

这很好

但我们使用的是Java,这里没有PHP专家,所以我将私钥和证书都导入到cacerts(导出到PKCS12,然后合并密钥库)

openssl pkcs12 -export -in signed.pem -inkey server.key -out signed.p12 -name custom -CAfile ca.crt -caname root
sudo keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore /Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/jre/lib/security/cacerts -srckeystore signed.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias custom

但是,没有运气:(

一直都有例外:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1977)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1093)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)

知道我们做错了什么吗


共 (1) 个答案

  1. # 1 楼答案

    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    当服务器无法访问时,通常会遇到这种情况。也许是防火墙问题
    你可以用java -Djavax.net.debug=ssl运行你的客户机,或者通过wireshark查看握手,了解问题所在