回答:
キーは既に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」を使用してファイルに名前を付けることをお勧めします。これにより、このファイルで保持する権限を管理しやすくなります。
cat server.crt server.key > server.pem
、オープンコメントを独自の行に配置しません。これは要件のようです。宅配便は私に地獄を与え、何が悪いのかを理解するのに何時間もかかりました。
server.crt server.key > server.includesprivatekey.pem
はhaproxy 1.5でのSSLに役立つと言っても過言ではありません。
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
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/
pem
ファイルには、証明書と秘密鍵が含まれています。証明書/キーの形式によって異なりますが、おそらく次のように簡単です。
cat server.crt server.key > server.pem
-bash: server.key.pem: Permission denied
私が観察したのは、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
openssl x509
です。それが出力有効なPEM証明書: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
この場合のようなものが必要です。説明すると、「-n」は、デフォルトで何も印刷しないようにsedに指示し、範囲式/--BEGIN/,$
は、p
コマンド(print)を含む最初の行と--BEGIN
ファイルの終わり($
)の間の行に適用します。
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をアップロードしました。
..そして、それは最終的にうまくいきました。
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.
以下のコマンドを実行します。
a)openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes
、
b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts
.pem
へ.crt
と.key
。