web-dev-qa-db-ja.com

OpenSSL RSA PRIVATEキーを使用したPEMからPFXへの変換

OpenSSLを使用してPEMファイルとRSA秘密鍵をPFXファイルに変換しようとしています。これが私が使用しようとしたコマンドの例です:

openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem

その際、次のエラーメッセージが表示されます。

unable to load private key
9068:error:0906D06C:PEM routines:PEM_read_bio:no start 
line:pem_lib.c:696:Expecting: ANY PRIVATE KEY

証明書ファイルは次のようになります。

-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----

秘密鍵は次のようになります。

-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----

エラーを掘り下げましたが、解決策はまだ見つかりません。

[〜#〜]編集[〜#〜]

追加の調査の結果、opensslのバージョンが異なると問題になるようです。

0.9.8zhを実行しているOSXシステムで2016年1月14日実行すると、これらのステートメントは正常に機能します。

ただし、バージョンOpenSSL 1.0.1p 2015年7月9日およびOpenSSL 1.1.0g 2017年11月2日のWindowsマシンで実行すると、上記のエラーが発生します。

6
thxmike

徹底的に調査した結果、鍵と証明書ファイルを生成するのはPowershellスクリプトであることがわかりました。

WindowsでNotepad ++を使用し、OSXでTex-Edit Plusを使用して隠し文字を特定すると、ファイルの最後に余分な[cr]があることがわかりました。

コマンドを使用する

openssl rsa -in <private key file> -noout -text
openssl x509 -in <cert file> -noout -text

ファイルの有効性を適切にチェックしています

私のソースはbase64でエンコードされた文字列だったので、Windowsでcertutilコマンドを使用してしまいました(つまり)。

certutil -f -decode cert.enc cert.pem
certutil -f -decode key.enc cert.key

windowsでファイルを生成します。ファイルが正しい場合、上記のOpenSSLコマンドは期待どおりに機能しました。

1
thxmike

証明書cert.pemにもキーが含まれています。キーのない証明書があることを確認してください。証明書の作成中に-nokeysを使用します。

0
user1014577

私も同じで立ち往生しました。そして@thxmikeが言ったように。私の場合も同様でした。

OpenSSLコマンドは、これに対して期待どおりに機能しませんでした。
openssl pkcs12 -export -in c.cer -inkey c.key -out d.pfx

そのため、WindowsでCertutilを使用することになりました。 Azureに追加したかったので。

注意:-
1。必ず.crtを.cerに変更してください。
2。 .cerファイルと.keyファイルを同じフォルダに同じ名前で配置してください-(c.cerとc.key)

次に実行します:
certutil -MergePFX c.cer c.pfx

結合されたpfxファイルを取得する必要があります。
乾杯!

0
Manish Gupta