2013-04-10 2 views
0

Я пытаюсь написать службу в Grails для отправки push-уведомлений для обновления пропусков сберегательных книг. Я дошел до того, что смог проверить, работает ли код для подключения к серверу APN, однако я не могу установить соединение с использованием методов Java SSLSocket.Сбой сертификата APN Passbook (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) 

Я посмотрел на файл PKCS12 с помощью Keytool Java, и есть только один псевдоним, который содержит всю цепочку сертификатов для моей сберкнижки, сертификата (свидетельство, ВДРВР, Apple сертификат), так что я застрял на том, почему сертификат не отправляется, когда он запрашивается. Любая помощь относительно того, почему она не отправляет информацию о сертификате, была бы очень оценена!

Edit: Кроме того, если кто-то опубликовать способ получения SSL сертификата от .p12, используемого для подписи пропусков или просто из сертификата сберкнижки, загруженный из Dev портала IOS, что известно на работу, то Я мог бы работать назад от этого, чтобы понять, что я делаю неправильно.

ответ

0

Теперь я чувствую себя глупым, по-видимому, имена файлов для моего файла клиента PKCS12 и файла хранилища доверия были неправильными, но при настройке хранилища ключей и доверия с помощью System.setProperty он не бросает никаких ошибок, если файлы не могут быть найденным или открытым.

Я попытался изменить свой код, чтобы создать SSLSocketFactory из SSLContext, созданного с помощью TrustManagerFactory и KeyManagerFactory, и когда я попробовал, он бросил FileNotFoundError. Сейчас, похоже, работает как минимум. Вздох.

Смежные вопросы