Windows Server/業務端末で証明書をエクスポートしようとすると「秘密鍵をエクスポートする」が選べず、CER(公開鍵のみ)しか出せないことがあります。本記事では原因の切り分けから、再発行で安全に移行する手順、AD CSテンプレート設定や再発防止まで実務目線で解説します。
起きている現象:PFXで出せない/「秘密鍵をエクスポートする」がグレーアウトする
証明書(.cer / .crt)は書き出せるのに、PFX(.pfx / .p12)にしようとすると次のような状態になります。
- エクスポート ウィザードで「はい、秘密鍵をエクスポートします」が選べない
- そもそも選択肢が表示されず、公開鍵証明書だけが出力される
- IIS や RDP、LDAPS などで使っている証明書なのに、バックアップできない
このとき重要なのは、同じ「PFXにできない」でも原因が大きく分かれることです。原因を誤ると、再発行が必要なのに延々と権限調整を続けてしまったり、逆に権限の問題なのに再発行で余計な作業を増やしてしまいます。
まずは切り分け:秘密鍵が「ない」のか、「あるが持ち出せない」のか
PFXは「証明書+秘密鍵」をひとつのファイルにまとめた形式です。したがって、PFX化できないときは大半が次のいずれかです。
| 状態 | Windowsでの見え方 | よくある原因 | 最短の対応方針 |
|---|---|---|---|
| 秘密鍵が存在しない(証明書だけ) | 証明書のアイコンに鍵マークがない/詳細に「対応する秘密鍵があります」が出ない | .cerだけを別サーバーにインポートした、CSRを作った端末と利用端末が違う、ユーザー用ストアとコンピューター用ストアを取り違えた | 秘密鍵を持つ元の環境でPFXを作る(作れないなら再発行) |
| 秘密鍵はあるがアクセスできない | 鍵マークはあるが、エクスポート時にエラー/サービスアカウントが利用できない | 秘密鍵ファイル(キーコンテナ)のACL不備、管理者権限不足、証明書が別ユーザーのストアにある | 秘密鍵のアクセス権(管理)を修正して再試行 |
| 秘密鍵はあるがエクスポート不可(non-exportable) | 鍵マークはあるのに「秘密鍵をエクスポート」が選べない | 発行時に「エクスポート不可」で生成、AD CSテンプレートで禁止、TPM/HSM/スマートカード等の設計 | サポートされる手段では取り出せないため、原則は再発行(再申請) |
CSRを作成したのに、なぜ「秘密鍵なし」になるのか
混乱しやすいポイントがCSR(証明書署名要求)には秘密鍵が含まれないことです。CSRは「公開鍵」「識別情報(CNや組織名など)」「署名(秘密鍵で作成)」を含みますが、秘密鍵そのものは端末内に保持されたまま外へ出ません。つまり、CSRを作った事実だけでは「秘密鍵をPFXとして持ち出せる」ことの保証にはなりません。
最短で確認するチェックポイント
- MMC(証明書)で対象証明書を開き、「この証明書に対応する秘密鍵を保有しています」等の表示があるか
- 証明書の置き場所が現在のユーザーなのかローカル コンピューターなのか(サービス用途は多くがローカル コンピューター)
- 管理者として操作しているか(ローカル コンピューターの証明書操作は管理者が基本)
コマンドで素早く棚卸しする場合は、PowerShellで「秘密鍵の有無」を見てしまうのが早いです。
Get-ChildItem -Path Cert:\LocalMachine\My |
Select-Object Subject, Thumbprint, HasPrivateKey, NotAfter |
Sort-Object NotAfter
HasPrivateKey が False なら、その証明書は秘密鍵と紐づいていません。Trueでも、次に「エクスポート可能かどうか」の問題が残ります。
結論:秘密鍵が「エクスポート不可」で作られている場合、正規手順でPFX化はできない
秘密鍵には「エクスポート可能/不可」という属性があり、作成時点でエクスポート不可(non-exportable)として生成されると、Windowsの標準機能(MMC、IIS、certutil等)や一般的な運用手順では秘密鍵を外部ファイルとして取り出せません。これは設計上の制約であり、後から設定を変更して「可」に切り替えることも基本的にはできません。
特に次のような環境では、意図的にエクスポート不可にしているケースが多いです。
- 社内CA(AD CS)のテンプレートで「秘密鍵をエクスポート可能にする」を無効にしている
- TPMを使うプロバイダー(例:Platform Crypto Provider)で鍵を生成し、端末外に出せない設計にしている
- 監査・コンプライアンス要件で「鍵の持ち出し禁止」が求められる(HSM/スマートカード等)
| 鍵の作り方(代表例) | エクスポート可否の傾向 | 実務上の意味 |
|---|---|---|
| ソフトウェア鍵(通常のCSP/KSP)+「エクスポート可能」 | 可 | PFXでバックアップ・移行しやすい(ただし流出リスクが上がる) |
| ソフトウェア鍵(通常)+「エクスポート不可」 | 不可 | 同一端末内での利用に限定される。移行は再発行が現実的 |
| TPM/HSM/スマートカード等で鍵生成 | 基本的に不可(設計に依存) | 鍵が端末外へ出ないのがメリット。移行は「別鍵で再発行」前提 |
「抜けるかもしれない」手段が語られる理由と、推奨しない理由
インターネット上では、サードパーティ製ツールや特殊な手順で「non-exportableな秘密鍵を抜ける」可能性が語られることがあります。ただし、ここで扱っているのは本来持ち出せないように保護された鍵であり、手段の多くは非サポートで高リスクです。
- 成功する保証がない(OSのバージョン、プロバイダー、TPM有無、ポリシーで結果が変わる)
- セキュリティ事故の原因になりやすい(秘密鍵の扱いがブラックボックス化する)
- 監査・規程違反になり得る(「持ち出し禁止」の統制を回避する行為と見なされる)
- ツール自体の安全性が担保しづらい(マルウェア混入、情報漏えい)
業務システムの証明書は「サービスの信用そのもの」です。移行やバックアップが目的なら、安全で再現性のある正攻法(再発行/再申請)を前提に設計し直すのが、結局いちばん安定します。
現実的な解決策:再発行(再申請)で「エクスポート可能な鍵」として作り直す
non-exportableで作られた秘密鍵を取り出せない以上、移行やバックアップに使えるPFXが必要なら、基本方針は次のどちらかです。
- 移行先サーバーで新規に鍵ペアを作り、証明書を再申請する(推奨)
- 現行サーバーで新規に鍵ペアを作り、証明書を再申請してからPFX化する(同一サーバー内で鍵更新したい場合)
再発行で何が変わる?(実務で効くポイント)
多くのケースで、再発行=新しい秘密鍵・公開鍵になります。つまり、見た目(CNやSAN)が同じでも暗号学的には別物です。
| 項目 | 再発行で起きること | 運用上の注意 |
|---|---|---|
| 鍵ペア | 新しい鍵になるのが一般的 | 証明書ピン留め(固定)をしているクライアントがあると再設定が必要 |
| 証明書の差し替え | IIS/RDP/LDAPS/SMTP(TLS)/VPN等で差し替えが必要 | 影響範囲を棚卸ししてから切替手順を作る |
| 旧証明書の扱い | 期限まで残る(自動で消えない) | 段階移行か、切替後に失効(リボーク)するか方針決めが必要 |
再発行の前にやるべき棚卸し(失敗しないための準備)
「証明書を取り直して差し替える」だけに見えて、現場ではここで詰まりがちです。先に棚卸ししておくと、切替時のトラブルが激減します。
- 対象証明書の用途(Server Authentication / Client Authentication / Code Signing 等)
- CNとSAN(FQDN、ワイルドカード、追加の別名)
- 発行元(社内CAか外部CAか)
- インストール場所(LocalMachine\My か CurrentUser\My か)
- 利用先(IISのバインド、RDS、LDAP、メール、VPN、アプリの設定ファイル、ロードバランサー等)
- 切替の許容停止時間(無停止なら二重化・段階切替の設計が必要)
差し替え対象の見落としがちな例
| 用途 | よくある差し替え箇所 | 見落としポイント |
|---|---|---|
| IIS (HTTPS) | サイトのバインド(SNI含む) | 別ポート/別サイトにも同証明書を使っていることがある |
| LDAPS | ドメインコントローラー/LDAPサーバーのLocalMachineストア | 中間CA証明書の配布不足でクライアント検証に失敗することがある |
| SMTP(TLS) | メールサーバー、アプリのSMTP送信設定 | 証明書名(SAN)がホスト名と一致していないとTLSが成立しない場合がある |
| VPN / NPS | RRASやNPSのサーバー証明書設定 | デバイス証明書(クライアント側)も絡むと影響範囲が広い |
| RDP / RDS | ゲートウェイ、Webアクセス、ブローカー等(構成による) | 役割ごとに証明書が分かれる。更新漏れで一部だけ警告が残りやすい |
ケース別:再発行(再申請)の進め方
社内CA(AD CS)で発行している場合
社内CA運用で多いのが「テンプレート側で秘密鍵エクスポートを禁止している」パターンです。移行やバックアップが業務要件なら、テンプレート運用を含めて見直すのが近道です。
テンプレートで確認・調整するポイント
- 対象テンプレートの「秘密鍵をエクスポート可能にする」の有無(必要な用途だけに限定)
- 自動登録(Autoenrollment)で勝手に非エクスポート鍵が配布されていないか
- セキュリティ(Enroll/Autoenroll権限)と発行ポリシーの整合
運用上は、既存テンプレートを直接いじるよりも、テンプレートを複製して「移行用/サーバー用」など用途を分ける方が安全です。エクスポート可能な鍵は漏えい時のインパクトが大きいため、対象範囲を最小化し、PFXの保管ルールをセットで整備してください。
発行・インストール後にPFX化する(正攻法)
- 移行元(または移行先)サーバーで、ローカル コンピューターの証明書ストアに証明書を取得
- MMC(証明書)で対象証明書を右クリックし、エクスポートを実行
- 「はい、秘密鍵をエクスポートします」を選択できることを確認
- PFXに含める項目(証明書チェーン、拡張プロパティ)を必要に応じて選択
- 強力なパスワードを設定して保存し、保管ルールに従って管理
外部CA(商用CA)で発行している場合
外部CAでも基本は同じで、鍵を作った場所に秘密鍵が残るのがポイントです。移行が前提なら、最初から「移行先で鍵を作ってCSRを出す」方が確実です。
- 移行先サーバーでCSRを作成(この時点で「エクスポート可能」にしておく)
- CAから返ってきた証明書を移行先サーバーにインストール(CSRを作ったサーバーに戻す)
- 必要ならPFXとしてバックアップ(保管ルールを徹底)
コマンドでCSRを作る場合(certreqの例)
GUIの手順が統一できない環境では、certreqでCSRを作ると再現性が上がります。以下は「エクスポート可能」「コンピューター用(MachineKeySet)」の基本形の例です。実際の運用では、テンプレート名、SAN、鍵アルゴリズム、プロバイダー等を環境に合わせて調整してください。
; request.inf(例)
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "CN=example.example"
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
RequestType = PKCS10
certreq -new request.inf request.req
certreq -submit request.req issued.cer
certreq -accept issued.cer
インストール後、MMCでPFXエクスポートが可能になります(テンプレートやプロバイダーがエクスポート禁止だと不可のままです)。
PFXのエクスポート手順(GUI/コマンド)
証明書の取得後、エクスポートの選択肢が出る状態なら、あとは「漏えいさせない運用」が重要です。
GUI(MMC)での基本
- 「証明書(ローカル コンピューター)」を開く
- 対象の証明書を右クリック → すべてのタスク → エクスポート
- 「はい、秘密鍵をエクスポートします」→ PFXを選択
- 必要に応じて「証明書パス内のすべての証明書を含める」をオン
- 強固なパスワードを設定し、保存
コマンド(certutil)での例
自動化や手順書化のためにコマンドでエクスポートしたい場合は、certutilが使えます(管理者権限が必要なことが多いです)。
certutil -store My
certutil -exportPFX -p "強力なパスワード" My "サムプリント" C:\temp\server.pfx
「サムプリント」は対象証明書のThumbprintです。間違えると別の証明書を出力してしまうため、棚卸し時に控えた情報と突き合わせて運用してください。
再発行後の差し替えを安全に進めるコツ
再発行は「取得」よりも「差し替え」が本番です。切替で失敗しないためのコツをまとめます。
段階切替(併用)できる設計にしておく
- ロードバランサー配下なら、ノードごとに順番に切替して戻せるようにする
- 証明書の有効期限が十分残っているうちに作業し、ロールバックの余地を確保する
- 切替後は監視(TLSハンドシェイク、期限、チェーン)を強化する
旧証明書の扱いを決める(保管・失効・削除)
切替後に旧証明書をどう扱うかは、監査や運用ルールとセットです。
- 段階移行中は旧証明書を残す(期限まで併用)
- 切替が完了し、旧証明書が不要なら失効(リボーク)を検討
- 証明書ストアから削除しても、秘密鍵が残るケースがあるため、必要なら棚卸しで確認
よくある質問
再発行したら、古い証明書の秘密鍵は取り出せるようになりますか?
なりません。再発行は新しい鍵ペアを作るのが一般的で、古い鍵の「エクスポート不可」という属性は変わりません。古い証明書を復元用にPFX化したい、という目的は再発行では達成できないため、そもそも非エクスポート鍵で運用する設計かどうかを再検討する必要があります。
「更新(更新申請)」と「再発行」は何が違いますか?
用語はCAや運用で揺れますが、実務では鍵が変わるかどうかが重要です。更新でも「新しい鍵」を作る場合が多く、結果として差し替え作業は再発行と同等になります。逆に「同じ鍵で更新」できる仕組みもありますが、non-exportable鍵のままだと移行目的のPFX化はできません。
どうしても移行が必要なのに、鍵を持ち出せない設計(TPM等)だった場合は?
その場合、前提として同一鍵の移行はできません。移行先で新しい鍵・新しい証明書に切り替える設計にするか、鍵を共有可能なHSM(クラスタ対応)など、要件に合う基盤を採用する必要があります。要件(持ち出し禁止)と運用(移行したい)が衝突しているので、セキュリティ・運用・監査の関係者で合意形成してから進めるのが安全です。
再発防止:次回以降に同じ問題を起こさないための設計・運用
今回のトラブルは「発行時の設計」でほぼ決まります。次回以降、移行やバックアップで困らないためのポイントを整理します。
| 目的 | 推奨アプローチ | 運用のポイント | 注意点 |
|---|---|---|---|
| 移行・バックアップを前提にしたサーバー証明書 | 発行時に「秘密鍵をエクスポート可能」+PFXを厳格に保管 | パスワード管理、アクセス制御、保管先の監査、棚卸し | PFXは漏えいすると即インシデント。保管統制が必須 |
| 鍵の持ち出し禁止が最優先 | TPM/HSM等で非エクスポート鍵を採用 | 移行は再発行・再設定で対応する前提で設計 | 「後からPFXでバックアップ」はできない |
| 社内CA(AD CS)での統制 | テンプレートを用途別に分け、必要なものだけエクスポート可 | Enroll権限を最小化し、配布経路(GPO等)を管理 | 既存に発行済みの非エクスポート鍵は救えない |
| 万一の復旧(鍵回収)まで考えたい | 設計段階で鍵アーカイブ(Key Archival)等を検討 | KRAやCA設定など前提条件が多いので事前検証が必須 | 後付けは難しい。運用・監査要件とセットで決める |
PFX保管の実務メモ(事故を起こさないために)
- PFXは「金庫扱い」にする(限定メンバーのみアクセス、持ち出し経路を統制)
- パスワードは使い回さず、秘密情報管理(Password Manager/金庫/物理媒体)で管理
- 証明書台帳(発行元、用途、SAN、期限、配置先、更新手順)を作り、更新漏れを防ぐ
- テスト環境で差し替えリハーサルをしてから本番に適用する
まとめ:PFXにできないときは「原因の切り分け」→「再発行で正攻法」が最短ルート
証明書を秘密鍵込み(PFX)でエクスポートできない問題は、原因が「秘密鍵がない」「権限がない」「エクスポート不可で作られた」のどれかで対処が変わります。特にnon-exportableで作られた秘密鍵は、サポートされる方法で取り出すことはできません。移行やバックアップが必要なら、再発行(再申請)でエクスポート可能な鍵として作り直し、差し替えと保管統制まで含めて運用を整えるのが、最も安全で確実な解決策です。

コメント