pemとp.12は何が違うのか?
(久しぶりの更新になってしまった・・・) 業務をしていてふと、疑問に思ったのでサクッと調べてみた。
証明書の拡張子の種類
以下のサイトの表がわかりやすい。
どうやら、「エンコードの種類」もしくは「証明書 or 鍵なのか」で拡張子を分けるぽい
エンコードで分ける
- 拡張子の種類としては 「.der」と「.pem」が存在する
- どちらも「ASN.1」というデータ構造で定義している
「ASN.1」は深くは調べないが、データ構造の表現方法の一種なのだなと理解。
https://e-words.jp/w/ASN.1.html
.derについて
- DER(Distinguished Encoding Rules)形式
- 「ASN.1」で表現されたデータを「バイナリデータ化」したもの
- バイナリデータなので、そのままでは読めない(エディタとかでドラッグしても表示されないっぽい)
- 1つのファイルに「1つの証明書」しか含められない
.pemについて
- PEM(Privacy Enhanced Mail)形式
- 「ASN.1」で表現されたデータを「バイナリデータ化」して、さらに、「Base64」で変換したテキストファイル
[memo] Base64 = バイナリデータをテキスト(ascii)データに変換する
- .der形式 から pemファイルが生まれるというわけ🧚♀️
「----BEGIN 」で始まる
メール送信プロトコルであるSMTPでは、バイナリデータを送ることができないので、メールで証明書を送る手段として生まれたのが「PEM」らしい
OpenSSLのデフォルトフォーマットでLinuxでよく使われる(今いるチームのシステムでもpemファイル使ってるな〜
拡張子が「.cer」になることもあるらしいが、Linuxでは「.pem」が使われるとのこと
.pemファイルはエディタとかで開ける、メモ帳でも開ける、そのまま読める
- 1つのファイルに「複数の証明書」を含められる → 複数含める場合としては「中間証明書」をくっつける場合 とかがあるらしい
証明書か鍵かで分ける
- 拡張子の種類としては、「.crt もしくは .cer」、「.key」、「.pfx もしくは .p12」
.crt もしくは .cer
- 中身が証明書(公開鍵もしくは誰かの公開鍵の証明書)の時に使用される拡張子
- Windowsでは「.cer」を、LinuxやApahceでは「.crt」を使うことが多い
- バイナリデータ(DER形式)もしくはテキストデータ(PEM形式)のどちらかの形式になっている
.key
- 中身が秘密鍵の時に使用される拡張子
- バイナリデータ(DER形式)もしくはテキストデータ(PEM形式)のどちらかの形式になっている
.pfx もしくは .p12
- 「PKCS#12形式(Personal Information Exchange)」と呼ばれる(古い名前として「PFX」とも呼ばれる)
- 証明書と証明書に紐づく秘密鍵が1つのファイルにまとめられている形式
- つまり、公開鍵と秘密鍵が一緒に入ってるファイル ☝️
- このファイルにはパスワードがかけられているので、中身を確認するにはパスワードの入力が必須!
- バイナリ形式なので、そのまま読めない
- Windows OSで証明書を使うときは、このフォーマットのことが多いらしい
・・・・・・・ということで、ざっくり調査してみました。
当初のpemとp12の違いは何か理解。
わざわざシステムで使うときにp.12の形式の証明書をpemにしてたのは、中身を確認するためだったのとシステムのOSがLinuxだからなのかな〜という理解 👀
他に参考にしたサイトたち
https://milestone-of-se.nesuke.com/sv-basic/windows-basic/certificate-export-format/
http://tooljp.com/windows/chigai/html/Cipher/PEM-CRT-CER-CERT-KEY-DER-CSR.html