По роду деятельности столкнулся с необходимостью отправлять push уведомления на яблочные девайсы. Была найдена библиотека JavaPNS 2.2, подготовлен сертификат для Developer версии, написан сервис который шлет push уведомления, все запустилось все завертелось, push уведомления отправляются — в общем полное счастье. Но вот настал день релиза, был вновь подготовлен уже Production сертификат и экспортирован вместе с приватным ключом в p12 все задеплоено на сервера… иииии… как вы наверное уже догадались ничего не заработало :). Судя по логам push отправляется, но на девайс ничего не приходит.
Первым делом смотрим документацию по JavaPNS и видим не очень ободряющую запись:
*ABOUT JAVA 7*:
Some users have reported problems creating SSL connections while using Java 7 (in general, not just with JavaPNS).
Until this issue is completely resolved, you should try to run JavaPNS with Java 5 or 6 if you experience
SSL-related connection issues.
Гугление дает примерно теже результаты и советы. Но было найдено 1 единственное упоминание проблемы:
Java 7 (JDK 1.7) doesn't know about the Entrust Root CA. Import your APNS cert, key, AND the Entrust CA Root certificate into a p12 file. Point the code at that file and it will work.
Суть кратко, по какой-то причине oracle исключил из поставки jre7 корневой сертификат Entrust.
Следовательно, нам нужно подсказать jre об этом центре сертификации. Варианта 2, положить его туда, где ему положенно быть /usr/lib/jre7/… (не наш путь, так как злобный админ не дает права рута, а сам ставить ничего не хочет) и вариант второй — просто включить его в контейнер с сертификат и приватным ключом. Что мы и сделаем.
1. Качаем сертификат
curl https://www.entrust.net/downloads/binary/entrust_ssl_ca.cer > entrust_ssl_ca.cer
2. Импортируем его в KeyChain получаем примерно следующее
3. Выделяем 3 сущности: сертификат, приватный ключ и рутовый сертификат Entrust
4. Правой кнопкой Export 3 items и сохраняем p12 контейнер (незабываем ввести пароль)
5. Далее с этим p12 подключаемся к gateway.push.apple.com и вперед спамить уведомлять пользователей :)
Автор: Ewka