過去にリリースしたiPhoneアプリのPush通知が気づいたら
送信できていなかったという自体が発生。
原因はPush通知用の証明書が期限切れになっていたことだったので
新たに証明書を作成して対応した。
対応方法は最初にPush通知の設定をする時と同じなんだけど、
久々で手順を忘れたりしたので備忘録として。

手順

  • 証明書署名要求ファイル作成

    キーチェーンアクセス.appから
    以下のようにして証明書アシスタントを起動する

    メールアドレスと通称を任意に設定してディスクに保存、
    鍵ペア情報を指定にチェックを入れて続ける
    そのまま道なりに行くとデスクトップ上に
    「CertificateSigningRequest.certSigningRequest」が出来る

  • iOSDevCenter側作業

    • iOSDevCenterのサイトにいって対象のApp IDを選択、editに入る
    • developmentとproductionのcreate certificate...を選択してさっき作ったcertSigningRequestをアップロードする
    • certificateファイルが出来るのでダウンロードする
  • キーチェーンアクセス.app作業

    • ダウンロードしたcerファイルをダブルクリックするとキーチェーンアクセスにappleの署名済み証明書が登録される
    • キーチェーンアクセスの自分の証明書タブを選択
    • 証明書と鍵を選択した状態で2個を書き出すを選択。設定はデフォでOK

  • pemファイルの作成

    • 作成した*.p12ファイルを以下のコマンドでpem形式に変換

      openssl pkcs12 -in 証明書名.p12 -out 証明書名.pem -nodes
      
  • Push通知を行うサーバ側作業

    作成したpemファイルをpush通知を利用するサーバの所定の場所にアップロード

以上ですが、証明書の有効期限が1年という
絶妙に忘れてしまいそうなタイミングなので、
なんらかの監視の仕組みがあった方がいいかもです。

有効期限チェック方法

以下のコマンドで証明書の有効期限が確認できる

openssl x509 -inform pem -in APS_Development.pem -text
  • オプション

    • inform : 入力ファイルの書式(今回はpem形式)
    • in 入力する証明書のファイル名
    • text テキスト形式で表示する

なので、これをgrepしてsedして日付を抽出して、
30日前になったらアラートメール送るとか
仕組みを作ればとりあえず監視できるかと。

$ openssl x509 -inform pem -in APS_Development.pem -text | grep 'Not After' | sed -e "s/^.\{24\}//"
Mar  3 10:26:10 2015 GMT