| この記事の要点 |
|
概要
PEM や CRT 単体では証明書と秘密鍵を別ファイルで扱う必要があり、配布や移行で「片方だけ送ってしまった」「鍵が漏れた」といった事故が起きやすい。PKCS#12 (RFC 7292) はこの問題を解決するために、X.509 証明書チェーンと秘密鍵を一括バイナリ化し、パスフレーズで暗号化する形式として定められた。
Microsoft が早期から PFX として採用したため Windows ファミリーでは事実上の標準で、IIS の証明書バインドや Authenticode 署名鍵 (signtool の /f 引数) はほぼ PFX を要求する。Java の PKCS12 キーストアや Kubernetes Ingress Controller の一部、Citrix / F5 アプライアンスでも採用される。
内部構造
PKCS#12 は ASN.1 構造で、外側に MAC (Message Authentication Code) を伴う「AuthSafe」があり、その中に複数の SafeBag (CertBag / KeyBag / ShroudedKeyBag など) が並ぶ。秘密鍵を保持する KeyBag は PBE (Password-Based Encryption)で暗号化される。歴史的に使われた pbeWithSHAAnd3-KeyTripleDES-CBC + RC2 のレガシー暗号と、近年の AES-256-CBC + PBKDF2 の 2 系統があり、古い OS (Windows Server 2008 R2 等) との互換性で問題が起きやすい。
ファイル全体は冒頭から DER バイナリで、テキストで読むことはできない。中身を確認するには OpenSSL の -info オプションを使うのが定番。
主な用途
- IIS への証明書インストール: 「証明書のインポート」で .pfx を選び、パスワードを入れてバインドするのが基本フロー。
- コード署名証明書の保管: EV コード署名以外は PFX で配布されることが多い。
signtool sign /f mycode.pfx。 - ロードバランサ / WAF へのアップロード: Azure Application Gateway、AWS ALB の一部、F5 BIG-IP など。
- S/MIME メール鍵の個人エクスポート: Outlook や Apple Mail の鍵バックアップ。
関連形式との比較
- PEM: テキスト、複数ファイルに分けがち、パスワード保護は鍵のみ任意。
- JKS (Java KeyStore): Java 独自バイナリ。JDK 9 以降は PKCS12 がデフォルトに変更され、JKS は徐々に縮小。
- P7B (.p7b): 証明書チェーンのみで秘密鍵は含まない。PKCS#12 と混同しがちだが用途が異なる。
- BKS (Bouncy Castle): Android 旧版で使われた独自形式。最近はあまり見ない。
コマンド・ツール
# PEM 群 (証明書 + 秘密鍵 + 中間 CA) を PFX にまとめる
openssl pkcs12 -export \
-inkey key.pem \
-in cert.pem \
-certfile chain.pem \
-name "myserver" \
-out bundle.pfx
# PFX を分解 (証明書と鍵を別 PEM へ)
openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in bundle.pfx -nocerts -nodes -out key.pem
# 中身の確認 (パスフレーズ要求)
openssl pkcs12 -in bundle.pfx -info -nodes
# Windows (PowerShell) で証明書ストアへ
Import-PfxCertificate -FilePath bundle.pfx `
-CertStoreLocation Cert:\LocalMachine\My `
-Password (Read-Host -AsSecureString)
# Java keystore (PKCS12) に変換
keytool -importkeystore -srckeystore bundle.pfx \
-srcstoretype PKCS12 \
-destkeystore mykeystore.p12 \
-deststoretype PKCS12
注意点
- パスフレーズの強度: PFX は鍵入りなので漏洩リスクが大きい。8 文字未満や弱い辞書語は避け、配布もパスフレーズと別経路で。
- レガシー暗号互換性: OpenSSL 3.x はデフォルト暗号が AES に変わり、古い Windows / Java で読めない事故が頻発。互換性が要るときは
-legacyや-keypbe/-certpbeを明示。 - Authenticode の HSM 化: 2023 年以降の OV/EV コード署名は PFX 配布が原則禁止になり、トークン or クラウド HSM に移行。新規調達時は要確認。
- エクスポート可能フラグ: Windows で「秘密キーをエクスポート可能にする」を忘れると、後で PFX に戻せず鍵をロストする。
- バックアップ: PFX は単独でサーバ復旧の鍵そのもの。漏洩対策とロスト対策を両立する保管設計が必要。
関連リンク
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09