Help us understand the problem. What is going on with this article?

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

More than 3 years have 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 は勉強すればするほど色んなことができるなーという印象です.
(正直使い方が正しいのかわかりませんが..)
今後もっと色々なことに使用していきたいと思います.

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

krimpedance
iOSをメインに触ってます.
http://krimpedance.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away