.keyおよび.crtファイルから.pemファイルを取得する方法


回答:


800

キーは既にPEM形式である可能性がありますが、.crtまたは.keyで名前が付けられているだけです。

ファイルの内容がで始まり-----BEGIN、テキストエディターで読み取ることができる場合:

このファイルは、バイナリ形式ではなく、ASCIIで読み取り可能なbase64を使用します。証明書はすでにPEM形式です。拡張子を.pemに変更するだけです。

ファイルがバイナリの場合:

server.crtの場合、次を使用します

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

server.keyの場合はopenssl rsa、の代わりに使用しますopenssl x509

server.keyはおそらく秘密鍵であり、.crtファイルは返された署名済みのx509証明書です。

これがWebサーバー用であり、個別の秘密鍵と公開鍵のロードを指定できない場合:

2つのファイルを連結する必要がある場合があります。この使用のため:

cat server.crt server.key > server.includesprivatekey.pem

「includesprivatekey」を使用してファイルに名前を付けることをお勧めします。これにより、このファイルで保持する権限を管理しやすくなります。


2
server.keyのフォーマットを確認してください。RSAだと思いました。しかし、ファイルの最初の行を読むと、おそらくそれがわかります。
maxwellb 2009年

10
ただの見出しだけではcat server.crt server.key > server.pem、オープンコメントを独自の行に配置しません。これは要件のようです。宅配便は私に地獄を与え、何が悪いのかを理解するのに何時間もかかりました。
Graham Walters、

1
グラハムに感謝します。ツールが異なればファイルの生成方法も異なりますが、最終的にはある程度の検証は適切です。これらの手順を実行すると、ファイルはたとえば改行で終了しました。
maxwellb 2014

.crtファイルと.keyファイルを連結するヒントは非常に役に立ちました。stunnel3で証明書を使用したいのですが、キーファイルを指定する方法がありませんでした。連結を使用するとうまくいきました。(実際には、stunnel3はPerlプログラムなので、キーファイルを読み取るためのオプションを自分で追加しました。ただし、後で連結が機能することを確認したので、stunnel3を元のコードに戻しました。)
LS

2
cat server.crt server.key > server.includesprivatekey.pemはhaproxy 1.5でのSSLに役立つと言っても過言ではありません。
jimm101 2014

224

AWS ELBでこれを行う必要がありました。ダイアログで何度も殴られた後、最後にこれは私にとってうまくいきました:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

ありがとうNCZ

編集:@floatingrockが言うように

AWSでは、ファイル名の前にを付けることを忘れないでくださいfile://。したがって、次のようになります。

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html


19
AWSでは、ファイル名の前にを付けることを忘れないでくださいfile://。それは次のようになりますので:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock

1
入力がpemファイルの場合、2番目のコマンドは何もしないので、それがそうであると仮定すると、最初のコマンドのみが必要です
Kristofer

驚くばかり!これは私にとってはうまくいきました!コード行を使用して.keyファイルと.crtファイルを.pemに変換し、AWSコンソール経由でアップロード(コピー/貼り付け)しました。ありがとう!
ディエゴD

79

pemファイルには、証明書と秘密鍵が含まれています。証明書/キーの形式によって異なりますが、おそらく次のように簡単です。

cat server.crt server.key > server.pem

続けます-bash: server.key.pem: Permission denied
tq

2
@tq:つまり、そのファイルの読み取りまたは書き込みは許可されていません。
2014年

@sthは許可を探してくれてありがとう。しかし、私はsudoコマンドでこれを行っていました
tq

8
@tq:cat server.crt server.key | sudo tee server.pem
dimir 2014

2
pemファイルの改行の欠落に注意してください----- END CERTIFICATE ---------- BEGIN CERTIFICATE -----
Wolfgang Fahl

24

さらに、パスフレーズを要求したくない場合は、次のコマンドを実行する必要があります。

openssl rsa -in server.key -out server.key

9
あなたが始まるファイルが必要な場合-----BEGIN RSA PRIVATE KEY-----とで始まるものを持っている-----BEGIN ENCRYPTED PRIVATE KEY-----、これはあなたが使用するコマンドです。
フィリップガーバー

18

これは.pemファイルを作成するための最良のオプションです

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

私が観察したのは、opensslを使用して証明書を生成すると、テキスト部分とbase64証明書部分の両方がcrtファイルにキャプチャされることです。厳密なpem形式では、ファイルはBEGINとENDで開始および終了する必要がある(wiki定義)。

.pem –(プライバシー強化メール)Base64でエンコードされたDER証明書。「----- BEGIN CERTIFICATE -----」と「----- END CERTIFICATE -----」で囲まれています

したがって、厳格なpem形式を想定している一部のライブラリ(Javaでこれに遭遇しました)の場合、生成されたcrtは「無効なpem形式」としての検証に失敗します。

BEGIN / END CERTIFICATEを使用して行をコピーまたはgrepし、それをcert.pemファイルに貼り付けても、機能するはずです。

これは私がやっていることですが、あまりきれいではありませんが、私にとってはうまくいきます。基本的には、BEGIN行から始まるテキストをフィルタリングします。

grep -A 1000 BEGIN cert.crt> cert.pem


1
別のオプションは、非厳密な証明書を単にで渡すことopenssl x509です。それが出力有効なPEM証明書: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

「BEGIN」からファイルの最後まですべてを取得したい場合、それはsedの仕事です。具体的には、sed -n '/--BEGIN/,$p' cert.crtこの場合のようなものが必要です。説明すると、「-n」は、デフォルトで何も印刷しないようにsedに指示し、範囲式/--BEGIN/,$は、pコマンド(print)を含む最初の行と--BEGINファイルの終わり($)の間の行に適用します。
dannysauer 2017

4

godaddyからapp engineに移行しようとしていました。トリックは何この行を使用していた:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

まったく同じですが、名前を私のドメイン名に置き換えます(それが本当に重要であるということではありません)

そして、私はwww.name.comとして一般名/組織に関するすべての質問に答えました

次に、csrを開いてコピーし、go daddyに貼り付けて、ダウンロードして解凍し、ターミナルで解凍フォルダーに移動して、次のように入力しました。

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

次に、Google AppsカスタムドメインSSLに関するトラブルからの以下の手順を使用しました。

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

privateKey.keyの代わりにname.unencrypted.priv.keyを使用し、www_mydomain_com.crtの代わりにname.crtを使用した以外は、まったく同じです。

次に、「PEMエンコードされたX.509証明書」のpublic.pemを管理コンソールにアップロードし、「暗号化されていないPEMエンコードされたRSA秘密鍵」のprivate.pemをアップロードしました。

..そして、それは最終的にうまくいきました。


4

AWSにGoDaddy証明書をアップロードしようとすると、何度か失敗しましたが、結局それは非常に簡単でした。何も.pemに変換する必要はありません。チェーンパラメータにGoDaddyバンドルの証明書を含めるようにしてください。たとえば、

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

失敗した以前のアップロードを削除するには、次のようにします

aws iam delete-server-certificate --server-certificate-name mypreviouscert

これは私にとってはうまくAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
いき

4
  1. appleIdによって暫定ポータルから証明書をダウンロードします。
  2. キーチェーンから証明書をエクスポートし、名前(Certificates.p12)を付けます。
  3. 上記のCertificates.p12ファイルを保存するターミナルとgotoフォルダーを開き、
  4. 以下のコマンドを実行します。

    a)openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes

    b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. .pemファイルの準備ができた「pushcert.pem」。

0
  • 端末を開きます。
  • 証明書があるフォルダーに移動します。
  • 名前を証明書に置き換えて、以下のコマンドを実行します。

openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • うまくいくことを願っています!!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.