ShellScript
iOS
Push通知
Swift

[iOS]プッシュ通知用の PEM ファイルを自動生成

More than 1 year has passed since last update.

タイトルの通りです.
地味に面倒なあの作業をShell Scriptで自動化します.

 自動化する部分

今回は,Apple developer のサイトでごにょごにょして,
以下のファイルを用意できたところから自動化して,
最終的にサーバ担当に渡す ck.pem ファイルを作成します.

aps.cer // ごにょごにょしてできたSSL証明書
app.p12 // CSR作った時にできる秘密鍵を書き出したもの

(「ごにょごにょ」の部分はたくさん記事があるので割愛します.)

 本来やること

本来ここからやらなければならないこと

  • aps.cer ファイルを aps.pem ファイルに変換

openssl x509 -in aps.cer -inform der -out aps.pem

  • app.p12 の秘密鍵を app.pem に変換

openssl pkcs12 -nocerts -out app.pem -in app.p12

  • (Option) app.pem のパスワード解除

openssl rsa -in app.pem -out app_pub.pem

  • pem 結合!!

cat aps.pem app.pem > ck.pem or cat aps.pem app_pub.pem > ck.pem

  • 接続テスト

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert aps.pem -key app.pem

はい,大変ですね.
コマンド忘れちゃいますね.

 Let's 自動化!

みんな大好き Shell Script で自動化していきます.
今回はパスワードの入力周りに力を入れてみました.

毎回入力するようにしてもいいですが,正直面倒ですよね?
そこで今回は,Expectという機能を用いて入力を自動化します.
Expectについてはこちらの記事で色々書かれていたので割愛します.

スクリプトの最初の方で秘密鍵のパスワードだけ入力するようにします.

printf "Enter Password:"
read password

あとのコマンドは,この情報を元に自動入力します.

expect -c "
log_user 0
set timeout 1
spawn openssl pkcs12 -nocerts -out $privateKeyPem -in $privateKey
expect \"Password:\"
send \"${password}\n\"
expect \"Mac verify error: invalid password?\" {
  exit 1
}
"

スクリプト全体についてはコードを見てもらったほうが早いので,説明は省きます(汗)

 完成したもの

Gistに置いてあります.

 使い方

基本的なコマンドは以下の通りです.

$ ./pushCertificate.sh aps.cer privateKey.p12

オプション

-p : 出力されるファイルにパスワードをつける
-d : 開発用証明書を使用する
     (テストサーバの切り替え用)

 未来の仕事

  • エラー処理を綺麗にしたい.(助けて)

 おわりに

今回は,iOSのプッシュ通知使用時の面倒な作業を自動化してみました.
Shell Script は勉強すればするほど色んなことができるなーという印象です.
(正直使い方が正しいのかわかりませんが..)
今後もっと色々なことに使用していきたいと思います.

スクリプトについては自由に使用改変してください.
致命的なミス等ありましたら,ご教授していただけると幸いです.