2013-04-10 47 views
0

我想在Grails中編寫一個服務來發送推送通知來更新存摺通行證。我到了可以測試連接到APN服務器的代碼是否正常工作的地步,但是,我似乎無法使用Java SSLSocket方法建立連接。Passbook APN證書失敗(Java/Groovy)

連接的第一部分工作,我從服務器收到證書並在證書鏈中查找可信證書;然而,之後,出於某種原因,我的客戶端證書/證書鏈沒有發送到服務器,因此連接失敗。

我似乎無法找出爲什麼沒有被髮送的證書,我用下面的代碼來設置密鑰庫:

void setupSSLPropertiesForConnection() { 
    System.setProperty("javax.net.ssl.keyStore", "superSecretFile.p12") 
    System.setProperty("javax.net.ssl.keyStorePassword", "superSecretPassword") 
    System.setProperty("javax.net.ssl.keyStoreType", "PKCS12") 

    System.setProperty("javax.net.ssl.trustStore", "trustStoreFile") 
    System.setProperty("javax.net.ssl.trustStorePassword", "trustStorePassword") 
    System.setProperty("javax.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol") 
} 

,然後嘗試連接到APN服務器:

setupSSLPropertiesForConnection() 
SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault() 
SSLSocket socket = (SSLSocket)factory.createSocket("gateway.push.apple.com", 2195) 

我使用Java的keytool看了看PKCS12文件,只有一個別名,它包含了整個證書鏈存摺證書(證書,WWDR,蘋果認證),所以我卡上爲什麼證書在請求時不會被髮送。任何幫助,爲什麼它不發送證書信息將非常感激!

編輯:另外,如果有人張貼正從一個或.p12用於簽署通行證或簡單地從iOS的開發門戶網站下載存摺證書,這是已知的工作SSL證書的方法,然後我可能會從中反思,找出我做錯了什麼。

回答

0

現在我覺得很愚蠢,顯然我的客戶端PKCS12文件和信任存儲文件的文件名都是錯誤的,但是在使用System.setProperty設置密鑰庫和信任庫時,如果文件不能被找到或打開。

我試着改變我的代碼,以便我從用TrustManagerFactory和KeyManagerFactory創建的SSLContext創建SSLSocketFactory,並且當我嘗試它時拋出FileNotFoundError。現在看起來至少在工作。嘆。