我尝试在Grails中编写服务以发送推送通知以更新传真通行证。我到了可以测试以查看连接到APN服务器的代码是否正常工作的点,但是,我似乎无法使用Java SSLSocket方法建立连接。
连接的第一部分工作,我从服务器收到证书,并在证书链中找到可信证书;但是,之后,由于某种原因,我的客户端证书/证书链没有被发送到服务器,因此连接失败。
我似乎无法弄清楚为什么没有发送证书,我使用以下代码来设置密钥库:
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,Apple证书)的整个证书链,所以我&#39 ;我坚持认为为什么证书在被要求时没有被发送。关于它为什么不发送证书信息的任何帮助都将非常感激!
编辑另外,如果有人要发布一种从用于签署通行证的.p12获取SSL证书的方法,或者只是从iOS开发门户网站下载的存折证书,这是已知的工作,然后我可以从那里向后工作,弄清楚我做错了什么。
答案 0 :(得分:0)
现在我感到愚蠢,显然我的客户端PKCS12文件和信任存储文件的文件名都是错误的,但在使用System.setProperty设置密钥库和信任库时,如果文件不能,则不会抛出任何错误发现或开放。
我尝试更改我的代码,以便从使用TrustManagerFactory和KeyManagerFactory创建的SSLContext创建SSLSocketFactory,当我尝试它时,它抛出了FileNotFoundError。现在它似乎至少起作用了。叹息。