Windows基礎

【Windows】証明書のエクスポート形式の違い, 秘密キーのセキュリティについて

Windows で扱える証明書の形式 (フォーマット)

Windows で証明書をエクスポートするとき、以下のようなフォーマットの選択肢が出てきます。

上記が Windows で扱える証明書のフォーマットです。

証明書形式略称拡張子データ形式特徴
DER encoded binary X.509DER.cerbinaryWindowsでよく使われる
Base 64 encoded X.509PEM.cer/.pemasciiLinuxでよく使われる
Cryptographic Message Syntax
Standard -PKCS #7 証明書
CMS.p7*binaryS/MIME 等(通信ではなく)
データの暗号化/デジタル
署名でよく使われる
Personal Information Exchange
- PKCS #12
PFX.pfxbinary秘密鍵と一緒にエクス
ポートする際に使われる
(クライアント証明書
でよく使われる)
Microsoft シリアル化された
証明書ストア
SST.sstbinaryあまり使われない

以下にそれぞれについて解説します。

DER encoded binary X.509

記載の通り、バイナリファイルです。拡張子は .cer がよく使われます。

X.509 というのは証明書の種類であり、SSL/TLS はじめ幅広く使われているタイプです。

DER とは Distinguished Encoding Rules の略で、ASN.1 という記述方法をバイナリにエンコードした形式になります。

1 つのファイルにつき、1 つの証明書しか含められません。

Base 64 encoded X.509 (PEM)

DER 形式を Base 64 でエンコードした、テキストファイルです。PEM (Privacy Enhanced Mail) とも呼ばれます。

PEM は OpenSSL のデフォルトのフォーマットであり、Linux でよく使われる形式ですので、Linux サーバで使うのであればこの形式が扱い易いでしょう。

こちらも拡張子が .cer とすることもありますが、Linux では .pem がよく使われます。

以下に本サイト PEM 形式の証明書をメモ帳で開いたときの状態を示します。

PEM 形式の場合、1 つのファイルに複数の証明書を含められます。例えば Linux サーバで Web サーバに https のための証明書を入れる場合、中間証明書を一緒にくっつけて配置することが多いです。

以下の右側のようにメモ帳でくっつけます。

メール送信プロトコルの SMTP 等は元々はバイナリデータを送ることができない、テキスト (文字コードが ascii) データのみを扱うプロトコルであったため、Base 64 等で [ バイナリデータをテキスト (ascii) データに変換 (エンコード) ] することが常套手段です。PEM もメールの暗号化/認証 (S/MIME 等) を使うための証明書を送るために誕生した形式です。

Cryptographic Message Syntax Standard - PKCS #7 証明書

これは最近の S/MIME でも使われる、あるデータに対する暗号化とデジタル署名を行うために使われます。RFC5652 で定義されており、CMS と略されます。バイナリ形式です。

拡張子は Windows では .p7b が使われます。他にも .p7a, .p7c, .p7s などバリエーションがあります。

https や LDAPs, SMTPs 等の通信経路上のデジタル署名用ではなく、メール本体データファイルへの暗号化/デジタル署名を行うことが多いです。

この形式では複数の証明書をアーカイブのように 1 つのファイルにまとめることができます。

本サイトの証明書の信頼チェーン (証明のパスにある証明書) を 1 つにまとめてエクスポートした結果を以下に示します。

Personal Information Exchange - PKCS #12

証明書と、それに紐付く秘密キーが 1 つのファイルでセットになっている形式です。バイナリ形式です。

Windows OS でクライアント証明書やサーバ証明書を使う場合はこのフォーマットにすることが多いです。

秘密キーは本人の認証を行うための重要なデータであるため、例えばエクスポート時に「正しくエクスポートされたときは秘密キーを削除する」といったオプションを選ぶこともできます。(要は移行元で使われ続けないように。移行先だけで本人認証が行われるように。)

また、秘密キーの利用にパスワードを要求するようにもできます。

以下に、秘密キーがパスワードで保護されているとっきの、インポート時の画面を示します。パスワードを入力しないとインポートできないようになっています。

「セキュリティを維持するために、秘密キーはパスワードで保護されています。」と表示されています。

秘密キーの保護を強力にする

秘密キーは標準ではインポート時/エクスポート時にパスワードを求められますが、このオプションにチェックを入れると、アプリケーションが秘密キーを使おうとするたびにパスワードが求められます。

このキーをエクスポート可能にする

このオプションにチェックを入れると、今回インポートした .pfx を再びエクスポートしようとしたときに、秘密キーもエクスポート可能になります。

逆に言うと、これにチェックを入れていないと、秘密キーはどうやってもエクスポートできません。

秘密キーのエクスポートの画面で、「はい、秘密キーをエクスポートします」がグレーアウトされて選択できない場合は、インポート時にこのオプションをチェックしていないためです。

仮想化ベースのセキュリティを使用して秘密キーを保護する

TPM (Trusted Platform Module) というハードウェアモジュール (セキュリティチップ) を利用した方法です。ディスクへの直接アクセスにより秘密キーが抜かれるようなリスクを減らします。

すべての拡張プロパティを含める

あえて外すような拡張プロパティは無いケースがほとんどかと思いますので、チェックを入れておくべきでしょう。

Microsoft シリアル化された証明書ストア

こちらも複数の証明書をアーカイブのように 1 つのファイルにまとめる、Microsoft の独自形式です。バイナリ形式です。

大量の証明書を一気にエクスポート⇒インポートする場合は便利かもしれませんが、その他はあまり利用シーンは無いように思います。

コメント

  1. ryochan より:

    いつもわかりやすい記事をありがとうございます!!わかりやすい図と解説でとても勉強になります。

    • nesuke より:

      ryochanさん
      コメントありがとうございます。

      こういった声を直接聞けると安心します。本当にありがとうございます。
      分かりにくい箇所ですとか、間違ってるんじゃない?といった箇所については遠慮なく優しい言葉でコメント頂けるとありがたいです。

      今後も本サイトをぜひよろしくお願い致します。

タイトルとURLをコピーしました