Passbook APN证书失败(Java/Groovy)

问题描述:

我想在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证书的方法,然后我可能会从中反思,找出我做错了什么。

现在我觉得很愚蠢,显然我的客户端PKCS12文件和信任存储文件的文件名都是错误的,但是在使用System.setProperty设置密钥库和信任库时,如果文件不能被找到或打开。

我试着改变我的代码,以便我从用TrustManagerFactory和KeyManagerFactory创建的SSLContext创建SSLSocketFactory,并且当我尝试它时抛出FileNotFoundError。现在看起来至少在工作。叹。