Windows OSで、証明書や秘密鍵をPEM形式に変換してエクスポートする:Tech TIPS(1/2 ページ)
WindowsとUNIX/Linuxでは、電子証明書やその秘密鍵の取り扱い方が異なる。そのため、Windowsで使っている証明書をUNIX/Linux系システムへ移す際、保存ファイルのフォーマット変換が必要になることがある。Windows OS上でその変換を行う手順を紹介する。
対象:Windows 10/Windows 11、Windows Server 2016/Windows Server 2019/Windows Server 2022、OpenSSL
■記事内目次
Windows OSで利用している電子証明書(以下、単に「証明書」)をUNIX/Linux環境に移したい。でも、両者の証明書の取り扱い方が違い過ぎてやり方が分からない……。そんな状況に遭遇したことはないだろうか。
本Tech TIPSでは、Windows OSで利用している証明書を、UNIX/Linuxの世界でよく使われている「PEM(Privacy Enhanced Mail)」形式に変換することで、より簡単に移行できるようにする方法と注意点を説明する。これにより、例えばWindows OSのIISで使っていたサーバ証明書を、クラウドやレンタルサーバ上のApache HTTP Serverに移す、といったことが可能になる。
変換作業はWindows OS上で行う。Windows OS標準ツールの他、オープンソースのSSL/TLSツールキット「OpenSSL」も利用する。Tech TIPS「WindowsにOpenSSLをインストールして証明書を取り扱う(基本編)」で説明しているように、OpenSSLはWindows環境にもインストールできる。またWSLにOpenSSLをインストールして利用してもよい。
Windows OSにインストールされた証明書のありか
証明書がWindows OSにインストールされると、通常は「証明書ストア」と呼ばれる場所に格納される。証明書ストア内の証明書を確認したりエクスポートしたりするには、専用の管理ツールやコマンドを用いる。
●「証明書ストア」を参照あるいは操作するには
GUIツールとしては「ユーザー証明書の管理」と「コンピューター証明書の管理」が利用できる。それぞれ「certmgr.msc」「certlm.msc」というファイル名を指定して実行可能だ。
これらのツールを起動すると、左ペインに証明書ストアのツリーが並び、いずれかの証明書ストアを選ぶと、そこに格納されている証明書が右ペインに表示される。
ユーザーの証明書は通常、上記の「ユーザー証明書の管理」ツールの[個人]−[証明書]を開くと参照できる。
コンピュータの証明書は通常、上記の「コンピューター証明書の管理」ツールの[個人]−[証明書]に格納されている。SSLサーバ証明書の場合は[Webホスティング]−[証明書]に格納されていることもある。
左ペインで証明書ストア(の中にある[証明書])を選択すると、そこに格納されている証明書の一覧が右ペインに表示される。右ペインの証明書をダブルクリックすると、その証明書の内容が表示される。証明書を右クリックするとエクスポートや証明書の書き換えなどができる。
コマンドとしては、Windows OS標準装備の「certutil.exe」が証明書ストアを操作できる。具体的な手順は後で説明する。
●証明書は必ずしも証明書ストアにあるとは限らない!?
Windowsアプリによっては、証明書ストア以外の場所で証明書を管理/運用していることもある。例えば、証明書が記載されたファイルを特定のフォルダに格納し、そこを参照するようなアプリも存在する。その場合は、アプリの仕様に従って証明書を記したファイルのありかを調べ、見つけたらPEM形式に変換して流用する。変換方法は後で説明する。
また、Mozilla FirefoxやThunderbirdでは、独自に証明書を管理している(詳細はTech TIPS「ThunderbirdでプライベートCA発行の証明書がエラーになる場合の対策方法(Windows)」参照)。これらはアプリの仕様に沿って証明書をファイルにエクスポートしてからPEM形式に変換する必要がある。
証明書ストアにある証明書と秘密鍵を.pfxファイルにエクスポートする
証明書ストアに格納されている証明書とその秘密鍵を取り出すには、いったん「.pfxファイル」にエクスポートしてから、PEM形式のテキストファイルへ変換する、という方法がある。
.pfxファイルとは、秘密鍵をパスワードで保護しつつ証明書と一緒に格納できる証明書ファイルの一種だ。発行元のCAやルートCAの証明書も一緒に格納できる。標準仕様としては「PKCS #12」に相当する。拡張子としては「.pfx」の他、「.p12」も用いられる。
ただし、以下の方法では秘密鍵が付いている証明書のみエクスポートできる。秘密鍵の有無は、前述した「ユーザー証明書の管理」「コンピューター証明書の管理」ツールに表示される証明書のアイコンに、鍵マークが乗っているかどうかで確認できる。
以下では、秘密鍵付きの証明書を前提としてエクスポート手順を紹介する。
●Windows OSのGUIで証明書ストア内の証明書や秘密鍵を.pfxファイルにエクスポートする
前述した証明書の管理ツールを用いると、ウィザードで対話的に操作して秘密鍵付きの証明書をエクスポートできる。
Windows OSのGUIで証明書ストア内の証明書や秘密鍵を.pfxファイルにエクスポートする(3/6)
証明書によっては秘密鍵のエクスポートが禁止されていることがある。その場合、[はい、秘密キーをエクスポートします]ラジオボタンが選択できず、秘密鍵のエクスポートは諦めざるを得ない。
Windows OSのGUIで証明書ストア内の証明書や秘密鍵を.pfxファイルにエクスポートする(4/6)
秘密鍵がない、またはそのエクスポートが禁止されている証明書の場合、[Personal Information Exchange -PKCS #12(.PFX)]ラジオボタンが選択できず、.pfxファイルにはエクスポートできない。
■操作手順
- Windows OSのタスクバーの検索アイコンまたは検索ボックスをクリック
- 検索ボックスに「証明書」と入力
- 検索にヒットしたもののうち、対象がユーザー証明書なら「ユーザー証明書の管理」を、コンピュータ証明書なら「コンピューター証明書の管理」をそれぞれクリックする。あるいは、「1」〜「3」の代わりに「certmgr.msc」「certlm.msc」を実行してもよい
- 起動した証明書の管理コンソールの左ペインで、ツリーを展開して、対象の証明書が格納されているストアを選択する。[個人]か[Webホスティング](コンピュータ証明書の場合)に格納されていることが多い
- 右ペインで対象の証明書を右クリックして、[すべてのタスク]−[エクスポート]をクリックして、証明書のエクスポートウィザードを起動
- 「秘密キーのエクスポート」までウィザードを進める
- [はい、秘密鍵をエクスポートします]ラジオボタンを選択。これが選択できない(秘密鍵のエクスポートが禁止されている)場合は、秘密鍵のエクスポートは諦め、あらためて移行先のシステムで証明書を要求・生成することを検討する
- [次へ]ボタンをクリック
- [Personal Information Exchange - PKCS#12(.PFX)]を選択後、[証明のパスにある〜][すべての拡張プロパティを〜][証明書のプライバシーを〜]にチェックを入れてオンにする。一方、[正しくエクスポートされたときは〜]はチェックを外してオフにする
- 次の「セキュリティ」画面では、[パスワード]にチェックを入れてオンにしてから、.pfxファイルにかける暗号化パスワードを入力
- [次へ]ボタンをクリック
- 「エクスポートするファイル」までウィザードを進める
- [参照]ボタンをクリックしてファイル保存ダイアログを開く
- 保存ファイル名を指定
- [保存]ボタンをクリックした後は、デフォルトの設定のままウィザードを進めて完了させる
pfxファイルからPEM形式へ変換する方法は後述する。
●コマンドラインで証明書ストア内の証明書や秘密鍵を.pfxファイルにエクスポートする
コマンドプロンプトなどで証明書ストア内の証明書をエクスポートするには、前述の「certutil.exe」コマンドを利用する。
certutil -f -user -exportpfx <証明書ストア名> <証明書のサブジェクトの共通名> <.pfxファイル名> ExtendedProperties,ExportParameters
certutil -f -exportpfx <証明書ストア名> <証明書のサブジェクト内の共通名> <.pfxファイル名> ExtendedProperties,ExportParameters
オプション | 意味 |
---|---|
-f | 強制的に上書きする。これを指定しないと、出力ファイルがすでに存在する場合にエラーが発生して失敗する |
-user | ユーザー証明書ストアを参照 |
-exportpfx | .pfxファイル(PKCS #12)関連の操作 |
ExtendedProperties | 拡張プロパティを含める |
ExportParameters | パラメーターをエクスポートする |
証明書ストアから.pfxファイルへエクスポートする際のcertutil.exeのオプション |
<証明書ストア名> | 「証明書の管理」ツールでの証明書ストア名 |
---|---|
My | 個人 |
WebHosting | Webホスティング |
Root | 信頼されたルート証明機関 |
CA | 中間証明機関 |
AuthRoot | サードパーティルート証明機関 |
UserDS | Active Directoryユーザーオブジェクト |
TrustedPublisher | 信頼された発行元 |
TrustedPeople | 信頼されたユーザー |
Disallowed | 信頼されていない証明書 |
ADDRESSBOOK | ほかの人 |
主な証明書ストアの名称の対応 |
<証明書のサブジェクト内の共通名>には、ハッシュ値(拇印)やシリアル番号を指定してもよい。いずれにせよ、指定の証明書ストア内で一意に対象の証明書を選択すること。
これらのコマンドラインを実行すると、.pfxファイルの暗号化パスワードの入力が求められるので、確認も含めて入力する。
「-p <パスワード>」オプションを指定すると、パスワードの対話的入力を省略できる(ただしセキュリティ上、スクリプトファイルなどにパスワードを直接記述することはおすすめできない)。
.pfxファイルから証明書や秘密鍵を取り出してPEM形式で保存する
.pfxファイルから証明書や秘密鍵を取り出すには、以下のようにOpenSSLコマンドを複数回、実行する。
openssl pkcs12 -in <.pfxファイル名> -out <対象の証明書のファイル名> -clcerts -nokeys
openssl pkcs12 -in <.pfxファイル名> -out <秘密鍵のファイル名> -nodes -nocerts
openssl pkcs12 -in <.pfxファイル名> -out <CA証明書のファイル名> -cacerts -nokeys
オプション | 意味 |
---|---|
pkcs12 | PKCS #12の証明書ファイル(.pfxファイル相当)を取り扱うためのコマンド |
-clcerts | 対象の証明書のみ出力 |
-nokeys | 秘密鍵を出力しない |
-nodes | 秘密鍵を暗号化せず平文で出力する |
-nocerts | 各種証明書を出力しない |
-cacerts | CA証明書のみ出力 |
証明書や秘密鍵を、.pfxファイルからPEM形式で取り出す際のOpenSSLのオプション |
以下の例では、*.caにCA証明書、*.crtに対象の証明書、*.keyに秘密鍵がそれぞれ格納される。なお、秘密鍵は暗号化されていないので、盗み見や漏えいに注意すること。
「-password pass:<パスワード>」オプションを指定すると、パスワードの対話的入力を省略できる(ただしセキュリティ上、スクリプトファイルなどにパスワードを直接記述することはおすすめできない)。
秘密鍵がない証明書を証明書ストアから取り出してPEM形式で保存する
●「証明書の管理」ツールを利用する場合
秘密鍵が付いていない証明書の場合、前述した「証明書の管理」ツールを用いれば、.pfxファイルを経由せず、証明書ストアからPEM形式のファイルへ直接エクスポートできる。
■操作手順
- 前述の手順で証明書の管理ツールを起動
- 左ペインで対象の証明書がある証明書ストアを選択
- 右ペインで対象の証明書を見つけてダブルクリック
- 証明書の詳細ダイアログが表示されたら、[詳細]タブを選択
- [ファイルにコピー]ボタンをクリック
- ウィザードが起動するので、「エクスポートファイルの形式」までウィザードを進める
- [Base 64 encoded X.509(.CER)]ラジオボタンを選択
- [次へ]ボタンをクリック
- 「エクスポートするファイル」までウィザードを進める
- 「ファイル名」欄の[参照]ボタンをクリック
- ファイル保存ダイアログが表示されるので、保存ファイル名を指定
- [保存]ボタンをクリック後は、デフォルトの設定のままウィザードを進めて完了させる
以上で対象の証明書はPEM形式でエクスポートされる。
証明書のパス(信頼の連鎖)にあるCA証明書は、以下の手順でエクスポートする。
■操作手順
- 前述の手順で証明書の詳細ダイアログを開く
- [証明のパス]タブを選択
- 「証明のパス」欄にCA証明書がツリー形式で表示されているので、エクスポートしたいCA証明書をダブルクリックする。詳細ダイアログが現れるので、前述の手順でエクスポートする
●コマンドラインの場合
cerutil.exeでも、秘密鍵が付いていない証明書を証明書ストアからエクスポートできる。ただ、エクスポート後にPEM形式へ変換する必要がある。
certutil -f -user {-GroupPolicy|-Enterprise} -store <証明書ストア名> <証明書のサブジェクト内の共通名> <一時保存用ファイル名>
certutil -f -encode <一時保存用ファイル名> <PEM形式のファイル名>
certutil -f {-GroupPolicy|-Enterprise} -store <証明書ストア名> <証明書のサブジェクト内の共通名> <一時保存用ファイル名>
certutil -f -encode <一時保存用ファイル名> <PEM形式のファイル名>
オプション | 意味 |
---|---|
-GroupPolicy | グループポリシーで配布されている証明書を対象とする |
-Enterprise | Active Directoryで公開されている証明書を対象とする |
-store | 証明書ストアの操作 |
-encode | Base 64でエンコード |
秘密鍵のない証明書をストアからエクスポートする際のcertutil.exeのオプション |
「-encode」オプションによるPEM形式への変換については、後で説明する。
Copyright© Digital Advantage Corp. All Rights Reserved.