キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
4390
閲覧回数
0
いいね!
1
返信

エクスポートしたPKCS12形式の証明書からの秘密鍵の取り出しについて

athirano1
Level 1
Level 1

こんにちは、ASA5545X + AnyConnect 4.5系でエンドユーザーにSSL-VPNサービスを提供しています。

サーバ証明書のエクスポートについて質問があります。
どなたかご回答いただけますでしょうか。

■概要
毎年、CSRを生成して、グローバルサイン社のような企業から証明書を発行してもらい適用しています。(1年更新)
適用した証明書をPKCS12形式(証明書+秘密鍵)でエクスポートして、
テスト機にインポートすると問題なく動作します。
CSR生成の時に使う秘密鍵は、General Purpose(エクスポートできない)として生成されたものを使用しています。

今年から、ASAからエクスポートした証明書を、別サーバに適用することを計画しています。
(SANsフィールドに別サーバー名/ドメイン名を列挙することで、別サーバにも適用可能という考え方です。
  SANsフィールド追加に対してオプション料金を払うことで、ライセンス料に関する問題をクリアできます。)
 

■実施内容
ASAからエクスポートしたPKCS12形式の秘密鍵つき証明書から、秘密鍵だけ取得する要望が出てきました。
(ASAからPEM形式の証明書(秘密鍵なし)をエクスポートすることは、CLIまたはASDMから容易にできます。)

PKCS12形式のファイルをOpenSSLで処理しようとしたのですが、うまくいきません。
OpenSSL for Win32での実施例を抜粋します。(Linux OSで実行しても同じでした)
----------------------------------------------
C:\OpenSSL-Win32\bin>openssl.exe pkcs12 -in C:\OpenSSL-Win32\PKCS\[ファイル名].p12 -out [出力ファイル名]
892:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:crypto\asn1\tasn_dec.c:1129:
892:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:crypto\asn1\tasn_dec.c:289:Type=PKCS12

書式、フォーマットなどがOpenSSLが想定したものと異なるということのようです。

秘密鍵に対するパスフレーズの入力を求めることもしてきません。
----------------------------------------------
普段、Linux, Windows OSサーバで使用する証明書を扱う業務をしていないため、

「一般的な他のOSとここが違う」といった判断をすることができません。

■質問内容
・ASAからエクスポートしたPKCS12ファイルには、Windows、Linux OSの場合と比較して、何か独自仕様はあるのでしょうか?
・OpenSSLで秘密鍵だけ取得する方法はあるのでしょうか?
・ASAで生成したNon-Exportableの鍵をExportableに変換することはできないと思いますが、
  一旦Non-Exportableで生成した鍵と同じ内容のものを、Exportableで再生成することは可能でしょうか?
  鍵の再生成→CSR生成→証明書の発行依頼のやり直しまで戻ると、時間的に厳しいためです。。
 
よろしくお願いします。


1件の返信1

athirano1
Level 1
Level 1
こんにちは
投稿したathirano1です。試したところ、以下の方法で秘密鍵の取得ができたようでした。
できれば、どなたか有識者(?)の方に確認をしていただきたいところではありますが。。

(以下、OpenSSL for Windowsでの実施例です)

1.ASAからExportした秘密鍵付証明書をBase64ファイルとしてデコードします。
===========================================================
openssl.exeコマンドではBase64を指定した暗号化/復号化処理ができないようなので、代替としてWindows標準コマンドを使用しました。

C:\OpenSSL-Win32\bin> certUtil -f -decode [ASAからエクスポートした秘密鍵付証明書のファイル名] [出力ファイル名]
入力長 = 4924
出力長 = 3547
CertUtil: -decode コマンドは正常に完了しました。
===========================================================


2.出力ファイルの情報をOpenSSLで取得します。
取得できたので、↑で実施のBase64によるデコード手順には問題がないと思われます。(多分)
===========================================================
C:\OpenSSL-Win32\bin> openssl.exe pkcs12 -in [Base64でデコードした出力ファイル名] -info
Enter Import Password: [パスフレーズを入力]
MAC:sha1 Iteration 1024
PKCS7 Encrypted data: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 1
Key bag
Bag Attributes
localKeyID: 00 00 00 01
friendlyName: c=[属性値],st=[属性値],l=[属性値],cn=[属性値]
Key Attributes: <No Attributes>
Enter PEM pass phrase: ←[パスフレーズを入力]
Verifying - Enter PEM pass phrase: ←[パスフレーズを再度入力]
-----BEGIN ENCRYPTED PRIVATE KEY----- ←暗号化された秘密鍵が表示れます
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQImHf9T+HuoVoCAggA
(途中省略)
G/ZhRRTcbxktMuCSB6DoEw==
-----END ENCRYPTED PRIVATE KEY-----
Certificate bag
Bag Attributes
localKeyID: 00 00 00 01
friendlyName: c=[属性値],st=[属性値],l=[属性値],cn=[属性値] ←証明書に含まれている各種の属性値が表示されます
subject=/C=[属性値]/ST=[属性値]/L=[属性値]/O=[属性値]/CN=[属性値]
issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2
-----BEGIN CERTIFICATE----- ←発行された証明書と同じ内容のものが出力されます。
MIIGbTCCBVWgAwIBAgIMRKk3nPLtQdKUu41YMA0GCSqGSIb3DQEBCwUAMGYxCzAJ
(途中省略)
jVmU55WBZijbYYC0pKRI8dc=
-----END CERTIFICATE-----
===========================================================


3.↑で出力された、暗号化された秘密鍵をテキストファイルにコピー&ペーストします。
===========================================================
C:\OpenSSL-Win32\bin>openssl.exe rsa -in [暗号化された秘密鍵のファイル名] -out [出力ファイル名]
Enter pass phrase for [暗号化された秘密鍵のファイル名]: [パスフレーズを入力]
writing RSA key ←ファイルが生成されました。
===========================================================

この秘密鍵が、後続処理で問題なく使用できるかは未確認です。。
Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします