.pemを.crtおよび.keyに変換する


371

誰かが証明書.crtと秘密鍵.keyファイルをファイルから抽出/変換する正しい方法/コマンドを教えてもらえ.pemますか?私はそれらが交換可能であることを読んだだけですが、どのようにではありません。



回答:


500

私はこれを使用してpemをcrtに変換することができました:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

13
テキストエディタを使用することは最善の方法ではありません。PKCS8形式でキーを抽出するには:openssl pkey -in mumble.pem -out mumble-key.pem OpenSSLバージョンが1.0.0より古い場合、キーをRSAキーとして抽出するには:openssl rsa -in mumble.pem -out mumble-key.pem
Andron

131
私はあなたの命令を試みましたが、私は持っていました:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
ダミアン・キャロル

15
キーコマンド(openssl pkey -in mumble.pem -out mumble-key.pem)は次のようになります:キーを読み込めません129051320116880:error:0906D06C:PEMルーチン:PEM_read_bio:no開始行:pem_lib.c:703:期待: PRIVATE KEY
mylord

2
openssl rsa -in your-cert.pem -outform pem -out your-key.pem
troyfolger

3
@Andronは、pkeyとrsaの両方でExpecting: ANY PRIVATE KEYエラーが発生します。
Aero Wang

393

OpenSSLを使用した変換

これらのコマンドを使用すると、証明書とキーを異なる形式に変換して、特定のタイプのサーバーまたはソフトウェアと互換性を持つようにすることができます。

  • DERファイル(.crt .cer .der)をPEMに変換する

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • PEMファイルをDERに変換する

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • 秘密キーと証明書を含むPKCS#12ファイル(.pfx .p12)をPEMに変換します

    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
    
    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
    
  • PEM証明書ファイルと秘密鍵をPKCS#12(.pfx .p12)に変換します

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • PEMをCRTに変換(.CRTファイル)

    openssl x509 -outform der -in certificate.pem -out certificate.crt
    

OpenSSL Convert PEM

  • PEMからDERに変換

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • PEMをP7Bに変換

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • PEMをPFXに変換

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    

OpenSSL Convert DER

  • DERをPEMに変換

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    

OpenSSL Convert P7B

  • P7BをPEMに変換

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • P7BをPFXに変換

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
    openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
    

OpenSSL Convert PFX

  • PFXをPEMに変換

    openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
    

OpenSSLでRSAキーを生成する

  • コマンドラインでOpenSSLを使用するには、最初に公開鍵と秘密鍵を生成する必要があります。-passout引数を使用してこのファイルをパスワードで保護する必要があります。この引数にはさまざまな形式があるため、OpenSSLのドキュメントを参照してください。

    openssl genrsa -out private.pem 1024
    
  • これにより、1024ビットを使用するprivate.pemというキーファイルが作成されます。このファイルには実際には秘密鍵と公開鍵の両方が含まれているため、このファイルから公開鍵を抽出する必要があります。

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    
    or
    
    openssl rsa -in private.pem -pubout > public.pem
    
    or
    
    openssl rsa -in private.pem -pubout -out public.pem
    

    これで、公開鍵のみを含むpublic.pemが作成されました。これをサードパーティと自由に共有できます。公開鍵を使用して自分で何かを暗号化し、秘密鍵を使用して復号化するだけで、すべてをテストできます。最初に、暗号化するためのデータが少し必要です。

  • ファイルの例:

    echo 'too many secrets' > file.txt
    
  • file.txtにいくつかのデータが含まれているので、OpenSSLと公開鍵を使用してデータを暗号化します。

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • これにより、file.sslと呼ばれるfile.txtの暗号化されたバージョンが作成されます。このファイルを見ると、それは単なるバイナリジャンクであり、誰にとっても何の役にも立ちません。これで、秘密鍵を使用して暗号化を解除できます。

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • これで、decrypted.txtに暗号化されていないファイルが作成されます。

    cat decrypted.txt
    |output -> too many secrets
    

OpenSSLのRSA TOOLSオプション

  • 名前

    rsa-RSAキー処理ツール

  • あらすじ

    openssl rsa [-help] [-inform PEM | NET | DER] [-outform PEM | NET | DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

  • 説明

    rsaコマンドはRSA鍵を処理します。さまざまなフォームとそのコンポーネントを印刷して変換できます。このコマンドは、秘密鍵の暗号化に従来のSSLeay互換形式を使用していることに注意してください。新しいアプリケーションでは、pkcs8ユーティリティを使用してより安全なPKCS#8形式を使用する必要があります。

  • コマンドオプション

    -help
    

    使用方法のメッセージを印刷します。

    -inform DER|NET|PEM
    

    入力フォーマットを指定します。DERオプションは、PKCS#1 RSAPrivateKeyまたはSubjectPublicKeyInfo形式と互換性のあるASN1 DERエンコード形式を使用します。PEMフォームはデフォルトのフォーマットです。追加のヘッダーおよびフッター行でエンコードされたDERフォーマットbase64で構成されます。入力では、PKCS#8形式の秘密鍵も受け入れられます。NET形式は、「注意事項」セクションで説明されている形式です。

    -outform DER|NET|PEM
    

    これは出力形式を指定します。オプションは-informオプションと同じ意味です。

    -in filename
    

    このオプションが指定されていない場合は、キーを読み取る入力ファイル名または標準入力を指定します。キーが暗号化されている場合は、パスフレーズの入力を求められます。

    -passin arg
    

    入力ファイルのパスワードソース。argの形式の詳細については、opensslのPASS PHRASE ARGUMENTSセクションを参照してください。

    -out filename
    

    これは、このオプションが指定されていない場合、キーまたは標準出力に書き込む出力ファイル名を指定します。暗号化オプションが設定されている場合は、パスフレーズの入力を求められます。出力ファイル名は入力ファイル名と同じであってはなりません。

    -passout password
    

    出力ファイルのパスワードソース。argの形式の詳細については、opensslのPASS PHRASE ARGUMENTSセクションを参照してください。

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    

    これらのオプションは、指定した暗号で秘密鍵を暗号化してから出力します。パスフレーズが要求されます。これらのオプションのいずれも指定されていない場合、キーはプレーンテキストで書き込まれます。つまり、rsaユーティリティを使用して暗号化オプションなしで暗号化されたキーを読み取ることで、キーからパスフレーズを削除したり、暗号化オプションを設定してパスフレーズを追加または変更したりできます。これらのオプションは、PEM形式の出力ファイルでのみ使用できます。

    -text
    

    エンコードされたバージョンに加えて、さまざまな公開鍵コンポーネントまたは秘密鍵コンポーネントをプレーンテキストで出力します。

    -noout
    

    このオプションは、キーのエンコードされたバージョンの出力を防ぎます。

    -modulus
    

    このオプションは、キーの係数の値を出力します。

    -check
    

    このオプションは、RSA秘密鍵の整合性をチェックします。

    -pubin
    

    デフォルトでは、秘密鍵は入力ファイルから読み取られます。このオプションを使用すると、代わりに公開鍵が読み取られます。

    -pubout
    

    デフォルトでは秘密鍵が出力されます。このオプションを使用すると、代わりに公開鍵が出力されます。入力が公開鍵の場合、このオプションは自動的に設定されます。

    -RSAPublicKey_in, -RSAPublicKey_out
    

    RSAPublicKey形式が代わりに使用されることを除いて、-pubinおよび-puboutと同様です。

    -engine id
    

    エンジンを(一意のID文字列で)指定すると、rsaは指定されたエンジンへの機能参照を取得しようとし、必要に応じて初期化します。次に、エンジンは、使用可能なすべてのアルゴリズムのデフォルトとして設定されます。

  • ノート

    PEM秘密鍵フォーマットは、ヘッダー行とフッター行を使用します。

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

    PEM公開鍵形式は、ヘッダー行とフッター行を使用します。

    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    

    PEM RSAPublicKey形式は、ヘッダー行とフッター行を使用します。

    -----BEGIN RSA PUBLIC KEY-----
    
    -----END RSA PUBLIC KEY-----
    

    NET形式は、古いNetscapeサーバーおよびMicrosoft IIS .keyファイルと互換性のある形式で、暗号化に無塩RC4を使用します。あまり安全ではないため、必要な場合にのみ使用してください。

    IISの一部の新しいバージョンでは、エクスポートされた.keyファイルに追加のデータがあります。これらをユーティリティで使用するには、バイナリエディタでファイルを表示し、「private-key」という文字列を探し、バイトシーケンス0x30、0x82(これはASN1シーケンスです)までトレースします。この時点以降のすべてのデータを別のファイルにコピーし、それを-inform NETオプションを指定したrsaユーティリティへの入力として使用します。

    RSA秘密鍵のパスフレーズを削除するには:

     openssl rsa -in key.pem -out keyout.pem
    

    トリプルDESを使用して秘密鍵を暗号化するには:

     openssl rsa -in key.pem -des3 -out keyout.pem
    

    秘密鍵をPEMからDER形式に変換するには:

      openssl rsa -in key.pem -outform DER -out keyout.der
    

    秘密鍵のコンポーネントを標準出力に出力するには:

      openssl rsa -in key.pem -text -noout
    

    秘密鍵の公開部分だけを出力するには:

      openssl rsa -in key.pem -pubout -out pubkey.pem
    

    秘密鍵の公開部分をRSAPublicKey形式で出力します。

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    

32
それでも、これは(エクスポートされた)バイナリ証明書から秘密鍵を取得する方法であるという質問には答えません。
bbaassssiiee 2017

秘密鍵と証明書が含まれているPEMがあるかどうか疑問に思います。証明書のみを取得するにはどうすればよいですか。テキストエディターを使用して証明書の部分をコピーできることはわかっていますが、opensslコマンドがあるので知りたいです。ありがとう
workplaylifecycle

46

PEMファイルからキーと証明書を抽出するには:

キーを抽出

openssl pkey -in foo.pem -out foo.key

キーを抽出する別の方法...

openssl rsa -in foo.pem -out foo.key

CAチェーンを含むすべての証明書を抽出します

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

テキストで最初の証明書をDERとして抽出します

openssl x509 -in foo.pem -outform DER -out first-cert.der

7
openssl x509 -outform der -in C:\ Users \ Greg \ .ssh \ e360_stork_listener.pem -out C:\ Users \ Greg \ .ssh \ e360_stork_listener.crtが証明書を読み込めません4294956672:error:0906D06C:PEMルーチン:PEM_read_bio:開始行なし:pem_lib.c:708:期待:
信頼できる

5

0.前提条件openssl インストールする必要があります。Windowsで、Git Bashがインストールされている場合は、それを試してください!代替バイナリはここにあります。

1. .keyから抽出.pem

openssl pkey -in cert.pem -out cert.key

2. .crtから抽出.pem

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt

1

.crtは証明書をpem形式で保存します。したがって、.pemはcsr(証明書署名要求)、秘密鍵、公開鍵、または他の証明書などの他の要素を持つこともできますが、証明書だけを格納する場合は.crtと同じです。

PEMは、Base 64でエンコードされたファイルで、各セクション間にヘッダーとフッターがあります。

特定のセクションを抽出するには、次のようなperlスクリプトが完全に有効ですが、opensslコマンドのいくつかを自由に使用できます。

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

ここで== 1は、必要なセクションに変更できます。明らかに、必要なヘッダーとフッターが正確にわかっていて、ファイルにそれらが1つしかない場合(通常、証明書とキーだけをそこに保持している場合)、それを簡略化できます。

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

0

あなたが使用しているためにこの質問をした場合mkcert、トリックは.pemファイルが証明書であり、-key.pemファイルがキーであることです。

(変換する必要はありません。実行するだけですmkcert yourdomain.dev otherdomain.dev

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