はじめに
iOSエンジニアさんとかインフラエンジニアさんたちとかは多分よく耳にするであろう、 PKCS12
(以下、p12) を PEM形式にPythonを使って変換するやつです。
事前にOpenSSLが入っている端末であれば、以下で変換できます。
$ openssl pkcs12 -in /path/to/hoge.p12 -out /path/to/output/hoge.pem -nodes -clcerts
p12ファイルにパスワードが設定されている場合は、パスワードを入力してPEMを出力できますね。(パスワードなしの場合は忘れた。でるのかな?
環境
OpenSSL
等の環境がないと思うのでそこら辺は各自でお願いします。
そもそもp12とかPEMって
p12
Wiki見て!!(説明することを放棄。自分がちゃんと完璧に理解していない)
PEM
準備
$ pip install pyopenssl
無事インストールできたらコード書いていくぜ!
また、 pyOpenSSL
のサポートしている OpenSSL
のバージョンは以下です。
Installation — pyOpenSSL 22.0.0 documentation
サンプルコード
from OpenSSL import crypto with open('/path/to/certificate.p12', 'rb') as p12_file, open('/path/to/output/certificate.pem', 'wb') as writer: p12 = crypto.load_pkcs12(p12_file.read(), 'passphase') # passphaseはp12のパスワード writer.write(crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())) writer.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey()))
/path/to/output/certificate.pem
にちゃんと変換されました!チャンチャン!!
ミソなのは、 p12
を バイナリ読み込み
して pem
を バイナリ書き出し
するところでしょうか。
最後に
実際に今回の方法で書き出した、 pem
をサーバにアップロードしてiOSアプリにプッシュ通知をしてみたところちゃんと送信されたので、動作に支障がないことがわかりました!
内容とは関係ないのですが、 with
構文のネストの書き方がいまいちまだわかっていない。もうちょっといい感じにかけるやつをマスターしたい。
今週の記事は結構手抜き。本当は、サーバ(Django)にHTMLのFormを使ってアップロードして保存するときに変換するやつとか書きたかったけどちょっと時間の都合上...