出现SSLHandshakeException unknown_ca APNS的java(SSLHa

2019-07-31 10:46发布

我试图实现对iphone独立的应用程序; 为此,我希望使用苹果推送通知的iPhone客户端。 我得到javax.net.ssl.SSLHandshakeException:收到致命警报:unknown_ca以下是我的Java代码连接到APNS网关:

int port = 2195;
String hostname = "gateway.sandbox.push.apple.com";
char[] passwKey = "password".toCharArray();

KeyStore ts = KeyStore.getInstance("PKCS12");
ts.load(new FileInputStream("/path/to/file/Cert.p12"), passwKey);
KeyManagerFactory tmf = KeyManagerFactory.getInstance("SunX509");
tmf.init(ts, passwKey);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(tmf.getKeyManagers(), null, null);
SSLSocketFactory factory = sslContext.getSocketFactory();

SSLSocket socket = (SSLSocket) factory.createSocket(hostname,port); 
String[] suites = socket.getSupportedCipherSuites();
socket.setEnabledCipherSuites(suites);
//start handshake
socket.startHandshake(); 

请帮我明白了什么,以及如何将SSL证书可以在我的Linux机器上安装。

编辑:

现在工作对我来说,我重新Cert.p12,程序开始工作。 我不知道什么是不工作的确切原因,但我想它会损坏Cert.p12文件。

感谢大家的帮助。

Answer 1:

unknown_ca:

接收到有效证书链或部分链,但或者证书不被接受,因为CA证书找不到不能用已知的,信任的CA相匹配 此消息始终是致命的。

您可能需要将证书添加到你的JRE的cacerts文件(一般位于下的lib / security)中。 看看到文档密钥工具和更多信息的-import选项。

你也许可以找到如何通过研究cacerts文件要做到这一点,并进一步在keytool的例子。



Answer 2:

有同样的问题。

进口到IE /导出与“所有的证书包括”解决了这个问题。



文章来源: SSLHandshakeException unknown_ca apns java