Posted at

[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 は勉強すればするほど色んなことができるなーという印象です.

(正直使い方が正しいのかわかりませんが..)

今後もっと色々なことに使用していきたいと思います.

スクリプトについては自由に使用改変してください.

致命的なミス等ありましたら,ご教授していただけると幸いです.