連載
» 2016年02月05日 05時00分 UPDATE

Tech TIPS:Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする (1/2)

WindowsとUNIX/Linuxでは、電子証明書やその秘密鍵の取り扱い方が異なる。そのため、Windowsで使っている証明書をUNIX/Linux系システムへ移す際、保存ファイルのフォーマット変換が必要になることがある。Windows上でその変換をする方法は?

[島田広道,デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象ソフトウェア:Windows 7/Windows 8/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2、OpenSSL



解説

 Windows OSの場合、暗号化や出どころの証明などに使われる電子証明書は、「証明書ストア」と呼ばれる場所に保存されている。そこに証明書や秘密鍵をインストールしたり、逆にエクスポートしてバックアップしたりする場合、「.cer」「.p7b」「.pfx」といった拡張子のファイルに証明書や秘密鍵を格納して取り扱う。

 一方、UNIX/Linuxの世界では、「PEM(Privacy Enhanced Mail)」と呼ばれる形式で証明書をファイルに保存して取り扱うことが比較的多い(PEM自体はエンコードにBase64を用いるデータフォーマットであり、証明書以外のデータにも利用されている)。

 それにWindowsとUNIX/Linuxとでは、証明書/秘密鍵の取り扱い方に違いがある(詳細は後述するが、仕様が同じ部分もある)。そのため、一方から他方へ証明書を移行する際、ファイルフォーマットの変換が必要になることがある。

 そこで本稿では、Windowsで利用していたサーバ証明書とその秘密鍵を主な対象として、それらをUNIX/Linuxへ移行するためにPEM形式に変換する方法を幾つか紹介する。これにより、例えばWindowsのIISで使っていたサーバ証明書を、クラウドやレンタルサーバ上のApache HTTP Serverに移す、といったことが可能になる。

 また変換作業はWindows上で行う。Windows標準のGUIツールの他、オープンソースのSSL/TLSツールキット「OpenSSL」を使った方法も紹介する。そのインストール方法については、TIPS「WindowsにOpenSSLをインストールして証明書を取り扱う(基本編)」を参照していただきたい。

操作方法

 以下では、Windows上で作成された証明書/秘密鍵の保存ファイル、あるいは証明書ストアに格納されている証明書/秘密鍵を、PEM形式に変換(エクスポート)してUNIX/Linuxの世界で扱いやすくする方法を紹介する。

●テキスト形式の.cer/.crtファイルは変換不要

 拡張子が「.cer」「.crt」であるファイルには通常、テキストまたはバイナリで証明書が格納されている。その内容が「-----BEGIN CERTIFICATE-----」から始まるテキストであれば、大抵はPEM形式であり、特に変換する必要はない。以下にその例を記す。

-----BEGIN CERTIFICATE----- ……この行から始まる
MIIDZzCCAtCgAwIBAgIDDhQNMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
……英数字と記号からなる文字列が何十行と続く……
LfG+cHDAXCO797M=
-----END CERTIFICATE----- ……この行で終わる



 PEM形式かどうかOpenSSLで確かめるには、次のコマンドラインを実行してエラーメッセージが表示されないことを確認すればよい。以下の例は、example1.cerがPEM形式ではなく、example2.cerがPEM形式である。

C:\temp>openssl x509 -inform PEM -text -noout -in example1.cer ……「example1.cer」をPEM形式の証明書ファイルと見なして、その内容を表示させてみる
unable to load certificate
52948:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:701:Expecting: TRUSTED CERTIFICATE ……PEM形式の証明書ではなかったことを表すエラーメッセージ

C:\temp>openssl x509 -inform PEM -text -noout -in example2.cer ……「example2.cer」の内容を表示させてみる
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 922637 (0xe140d)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
        Validity
            Not Before: Nov 24 23:21:49 2009 GMT
            Not After : Nov 26 18:51:17 2010 GMT
        Subject: serialNumber=qYWKpU3yJ1tbMYQ0-K2NMGQw0QO8YiMJ, C=JP, O=taiyoseikatsu.com, OU=GT20031359, OU=See www.geotrust.com/resources/cps (c)09, OU=Domain Control Validated -
 QuickSSL Premium(R), CN=taiyoseikatsu.com ……共通名(CN)など証明書の内容が詳しく表示される
……<以下省略>……



 opensslコマンドの各オプションの意味は次の通りだ。

  • x509: 証明書を取り扱うためのコマンド
  • -inform PEM: 入力ファイルの形式としてPEMを指定する(デフォルトの形式はPEMなので、通常は明示的に指定する必要はない)
  • -text: 分かりやすいテキスト形式で証明書の内容を出力する
  • -noout: 証明書をファイルに出力しない
  • -in <ファイル名>: 入力ファイルの指定(この場合は証明書ファイル)

●バイナリの*.cerファイルからPEM形式で証明書や秘密鍵を取り出す

 .cer/.crtファイルをメモ帳などで開くと文字化けが多数表示される場合、それは「DER(Distinguished Encoding Rules)」と呼ばれるバイナリの形式である可能性が高い。

DER形式で保存された証明書ファイルをメモ帳で開いたところ DER形式で保存された証明書ファイルをメモ帳で開いたところ
DER形式はバイナリなので、このようにテキストエディタでは文字化けする。

 これをPEM形式に変換するには、エクスプローラで該当ファイルをダブルクリックして証明書のダイアログを開き、[Base 64 encoded X.509 (.CER)]という形式を選んでエクスポートを実行する。

WindowsのGUIでDER形式の証明書ファイルをPEM形式に変換する(その1) WindowsのGUIでDER形式の証明書ファイルをPEM形式に変換する(その1)
これはエクスプローラで証明書ファイルをダブルクリックして表示されたダイアログ。
  (1)[詳細]タブを選ぶ。
  (2)[ファイルにコピー]ボタンをクリックすると、証明書をエクスポートするためのウィザードが起動する。
WindowsのGUIでDER形式の証明書ファイルをPEM形式に変換する(その2) WindowsのGUIでDER形式の証明書ファイルをPEM形式に変換する(その2)
エクスポートウィザードを進めると、途中でこの画面が表示される。
  (3)[Base 64 encoded X.509 (.CER)]を選ぶ
  (4)あとは[次へ]ボタンをクリックして、保存ファイル名を指定後、ウィザードを完了させる。

 OpenSSLでDER形式からPEM形式に変換するには、次のコマンドラインを実行する。「example3.cer」がDER形式の証明書ファイルで、「example3.pem」がPEM形式の証明書ファイルとなる。

openssl x509 -in example3.cer -inform DER -out example3.pem -outform PEM



 opensslコマンドの各オプションの意味は次の通りだ。

  • -out <ファイル名>: 出力ファイルの指定
  • -outform PEM: 出力ファイルの形式としてPEMを指定する(デフォルトがPEM形式なので、通常は明示的に指定する必要はない)

●.p7bファイルからPEM形式で証明書や秘密鍵を取り出す

 拡張子が「.p7b」であるファイルには、「PKCS(Public-Key Cryptography Standards) #7」と呼ばれる仕様で証明書が保存されている。このファイルには、対象のサーバ証明書だけではなくルート証明書や中間証明書も含まれていることがある。以下に、Base64でエンコードされた.p7bファイルの内容の例を記す。

-----BEGIN PKCS7----- ……この行から始まる
MIIVTwYJKoZIhvcNAQcCoIIVQDCCFTwCAQExADALBgkqhkiG9w0BBwGgghUkMIIF
……英数字と記号からなる文字列が何十行と続く……
ay7pzEwOWpp5DyAKLtWeYyYeVZKU2IIXWnvQvMePToYEMQA=
-----END PKCS7----- ……この行で終わる



 これをUNIX/Linux系のサーバやサービスで利用するには、各証明書を別々のPEM形式のファイルに保存しなければならないことがよくある。

 .p7bファイルの場合、前述のDER形式と同様、エクスプローラからGUIでPEM形式のファイルに保存できる。

.p7bファイルの内容 .p7bファイルの内容
これは.p7bファイルをエクスプローラでダブルクリックしたときに表示されるウィンドウ。前述のDER形式と同様の手順で、ここから各証明書をエクスポートできる。
  (1)このツリーを展開して[証明書]を選ぶと、格納されている証明書の一覧が右ペインに表示される。
  (2)サーバ証明書。ダブルクリックすると証明書ダイアログが表示されるので、DER形式と同じ手順でエクスポートする。
  (3)(2)(4)のルート証明書。(2)と同じ手順でエクスポートできる。ただし、公的な認証局であれば大抵は移行先に同じルート証明書が存在するため、エクスポートして移す必要はない。
  (4)(2)の中間証明書。(2)と同じ手順でエクスポートできる。ちなみに中間証明書かルート証明書か判別するには、前述の証明書ダイアログの[証明のパス]タブで確認すればよい。

 OpenSSLで.p7bファイルをPEM形式に変換するには、次のコマンドラインを実行する。

openssl pkcs7 -in example4.p7b -inform PEM -out example4.pem -outform PEM -print_certs



 opensslコマンドの各オプションの意味は次の通りだ。

  • pkcs7: PKCS #7の証明書ファイルを取り扱うためのコマンド
  • -print_certs: 入力ファイルに含まれる複数の証明書を出力する

 出力されたexample4.pemには、次のようにサーバ証明書とルート証明書、中間証明書が並んで記載されているので、テキストエディタで切り出して別々のファイルに保存する。

subject=/OU=Domain Control Validated/OU=EssentialSSL Wildcard/CN=*.locationsmart.org ……共通名が「*.locationsmart.org」であるサーバ証明書が、この2行下にある
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA
-----BEGIN CERTIFICATE----- ……ここから切り出す
MIIFYjCCBEqgAwIBAgIRAN0J06vJswp0KM0TcGrONhkwDQYJKoZIhvcNAQELBQAw
……<省略>……
9hcIrQkheTTWNtyHy15Ac+eKWwryZ/wo3CTDftBkFD2m5AMF2zg=
-----END CERTIFICATE----- ……ここまでをサーバ証明書として保存する

subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA ……中間証明書の一つ。この2行下にある
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
-----BEGIN CERTIFICATE----- ……ここから切り出す
MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
……<省略>……
+AZxAeKCINT+b72x
-----END CERTIFICATE----- ……ここまでを中間証明書として保存する

subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority ……中間証明書の一つ。この2行下にある
issuer=/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
-----BEGIN CERTIFICATE----- ……ここから切り出す
MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
……<省略>……
pu/xO28QOG8=
-----END CERTIFICATE----- ……ここまでを中間証明書として保存する

subject=/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root ……ルート証明書。この2行下にある
issuer=/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
-----BEGIN CERTIFICATE----- ……ここから切り出す
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
……<省略>……
mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
-----END CERTIFICATE----- ……ここまでをルート証明書として保存する



       1|2 次のページへ

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

Touch Barという新UIを得た「MacBook Pro」、プレゼント!

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。