2009-08-05 77 views
4

我想爲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文件。

感謝大家的幫助。

回答

1

unknown_ca:

接收到有效的證書鏈或部分鏈,但或者證書不被接受,因爲CA證書不能定位無法用已知的,受信任的CA匹配這個消息總是致命的。

您可能需要將證書添加到您的jre的cacerts文件(通常位於lib/security下)。查看keytool及其-import選項的文檔以獲取更多信息。

你或許可以找到一個如何通過進一步研究cacerts文件和keytool來做到這一點的例子。

0

也有同樣的問題。

導入到IE /導出「包括所有證書」解決了它。

+0

你是指「包括所有證書」是什麼意思?這是否是某個複選框?找不到:( – Goddchen 2012-01-04 09:39:30