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にインストールされると、通常は「証明書ストア」と呼ばれる場所に格納される。証明書ストア内の証明書を確認したりエクスポートしたりするには、専用の管理ツールやコマンドを用いる。
GUIツールとしては「ユーザー証明書の管理」と「コンピューター証明書の管理」が利用できる。それぞれ「certmgr.msc」「certlm.msc」というファイル名を指定して実行可能だ。
これらのツールを起動すると、左ペインに証明書ストアのツリーが並び、いずれかの証明書ストアを選ぶと、そこに格納されている証明書が右ペインに表示される。
ユーザーの証明書は通常、上記の「ユーザー証明書の管理」ツールの[個人]−[証明書]を開くと参照できる。
コンピュータの証明書は通常、上記の「コンピューター証明書の管理」ツールの[個人]−[証明書]に格納されている。SSLサーバ証明書の場合は[Webホスティング]−[証明書]に格納されていることもある。
左ペインで証明書ストア(の中にある[証明書])を選択すると、そこに格納されている証明書の一覧が右ペインに表示される。右ペインの証明書をダブルクリックすると、その証明書の内容が表示される。証明書を右クリックするとエクスポートや証明書の書き換えなどができる。
コマンドとしては、Windows OS標準装備の「certutil.exe」が証明書ストアを操作できる。具体的な手順は後で説明する。
Windowsアプリによっては、証明書ストア以外の場所で証明書を管理/運用していることもある。例えば、証明書が記載されたファイルを特定のフォルダに格納し、そこを参照するようなアプリも存在する。その場合は、アプリの仕様に従って証明書を記したファイルのありかを調べ、見つけたらPEM形式に変換して流用する。変換方法は後で説明する。
また、Mozilla FirefoxやThunderbirdでは、独自に証明書を管理している(詳細はTech TIPS「ThunderbirdでプライベートCA発行の証明書がエラーになる場合の対策方法(Windows)」参照)。これらはアプリの仕様に沿って証明書をファイルにエクスポートしてからPEM形式に変換する必要がある。
証明書ストアに格納されている証明書とその秘密鍵を取り出すには、いったん「.pfxファイル」にエクスポートしてから、PEM形式のテキストファイルへ変換する、という方法がある。
.pfxファイルとは、秘密鍵をパスワードで保護しつつ証明書と一緒に格納できる証明書ファイルの一種だ。発行元のCAやルートCAの証明書も一緒に格納できる。標準仕様としては「PKCS #12」に相当する。拡張子としては「.pfx」の他、「.p12」も用いられる。
ただし、以下の方法では秘密鍵が付いている証明書のみエクスポートできる。秘密鍵の有無は、前述した「ユーザー証明書の管理」「コンピューター証明書の管理」ツールに表示される証明書のアイコンに、鍵マークが乗っているかどうかで確認できる。
以下では、秘密鍵付きの証明書を前提としてエクスポート手順を紹介する。
前述した証明書の管理ツールを用いると、ウィザードで対話的に操作して秘密鍵付きの証明書をエクスポートできる。
pfxファイルからPEM形式へ変換する方法は後述する。
コマンドプロンプトなどで証明書ストア内の証明書をエクスポートするには、前述の「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ファイルから証明書や秘密鍵を取り出すには、以下のように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:<パスワード>」オプションを指定すると、パスワードの対話的入力を省略できる(ただしセキュリティ上、スクリプトファイルなどにパスワードを直接記述することはおすすめできない)。
秘密鍵が付いていない証明書の場合、前述した「証明書の管理」ツールを用いれば、.pfxファイルを経由せず、証明書ストアからPEM形式のファイルへ直接エクスポートできる。
以上で対象の証明書はPEM形式でエクスポートされる。
証明書のパス(信頼の連鎖)にある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.