タイトルの通りです.
地味に面倒なあの作業を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 は勉強すればするほど色んなことができるなーという印象です.
(正直使い方が正しいのかわかりませんが..)
今後もっと色々なことに使用していきたいと思います.
スクリプトについては自由に使用改変してください.
致命的なミス等ありましたら,ご教授していただけると幸いです.