SSLHandshakeException unknown_ca apns java

问题描述:

我想为iPhone实现一个独立的应用程序;我希望为iPhone客户端使用Apple推送通知。 我得到javax.net.ssl.SSLHandshakeException:收到致命警报:unknown_ca 以下是我的Java代码连接到APNS网关:SSLHandshakeException unknown_ca apns java

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文件。

感谢大家的帮助。

unknown_ca:

接收到有效的证书链或部分链,但或者证书不被接受,因为CA证书不能定位无法用已知的,受信任的CA匹配这个消息总是致命的。

您可能需要将证书添加到您的jre的cacerts文件(通常位于lib/security下)。查看keytool及其-import选项的文档以获取更多信息。

你或许可以找到一个如何通过进一步研究cacerts文件和keytool来做到这一点的例子。

也有同样的问题。

导入到IE /导出“包括所有证书”解决了它。

+0

你是指“包括所有证书”是什么意思?这是否是某个复选框?找不到:( – Goddchen 2012-01-04 09:39:30