プッシュ通知機能:証明書.p12からサーバー用証明書(.pem)を作成する際の注意点

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

CRONでPHPを定期的に自動処理させ、Apple Push を使って各iOSデバイスに通知を配信する仕組みを施し、ある程度の期間サービスを運用し、数年経った頃に

Error: Unable to connect to ‘ssl://gateway.push.apple.com:2195’:  (0)#0

というエラーが出て配信できなくなっていた時の原因と対処についてのMEMOです。

証明書の期限切れが原因

ルート証明書は、自前証明書で期限をできる限り長く設定していたりして、期限は切れていなかったものの、サーバー用証明書の方は、一定の期間経つと期限が切れて再作成する必要があったりするかもしれません。

iOSでPush通知を実装する方法をまとめました。おそらくここを読んでいる方は実機テストをした方だと思いますので実機テストの方法は省きます。Pushに必要な証明書の作り方を中心に取り上げます。PushはPHPのライブラリ

ここの情報が非常に有益で参考にさせていただきました。が、一点、細かい点でミスって対処に無駄に時間がかかってしまっていたのでMEMOしておきます。

証明書.p12を書き出す時に注意

上記サイトにおいて「aps_development.cer から server_certificates_sandbox.pem を作成」という段階で、「サーバ用証明書」というpemファイルを作成する流れがあります。

openssl pkcs12 -in 証明書.p12 -out server_certificates_sandbox.pem -nodes -clcerts

のようにopensslで.pemファイルを作成し、これをサーバーにアップロードし、phpで指定して利用することで通知機能が働くようになるわけですが、この証明書.p12を作成するときに、MacOSのキーチェーンを使って書き出します。このとき、

00

のように証明書部分を2項目選択して書き出した場合にエラーが出なくなり、うまくいきました。下の図のように

01

鍵アイコンの部分のみを選択して書き出した場合は、うまくいきませんでした。細かな違いですが、ここに違いがあると思わなかったので対処に時間がかかりました。一応MEMOとして残しておきました。