簡體   English   中英

將 .pem 轉換為 .crt 和 .key

[英]Convert .pem to .crt and .key

誰能告訴我從.pem文件中提取/轉換證書.crt和私鑰.key文件的正確方法/命令嗎? 我只是讀到它們是可以互換的,但不知道如何互換。

我能夠使用這個將 pem 轉換為 crt:

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

使用 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 轉換 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 轉換 DER

  • 將 DER 轉換為 PEM

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

OpenSSL 轉換 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 轉換 PFX

  • 將 PFX 轉換為 PEM

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

通過 OpenSSL 生成 rsa 密鑰

  • 在命令行上使用 OpenSSL,您首先需要生成公鑰和私鑰,您應該使用 -passout 參數密碼保護此文件,此參數可以采用許多不同的形式,因此請參閱 OpenSSL 文檔。

     openssl genrsa -out private.pem 1024
  • 這將創建一個名為 private.pem 的密鑰文件,該文件使用 1024 位。 這個文件實際上有私鑰和公鑰,所以你應該從這個文件中提取公鑰:

     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,您可以自由地與第 3 方共享它。 您可以通過使用您的公鑰自己加密一些東西然后使用您的私鑰解密來測試這一切,首先我們需要一些數據來加密:

  • 示例文件:

     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 工具選項

  • 名稱

    rsa - RSA 密鑰處理工具

  • 概要

    openssl rsa [-help] [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in 文件名] [-passin arg] [-out 文件名] [-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 形式是一種在 NOTES 部分中描述的格式。

     -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

    像 -pubin 和 -pubout 一樣,但使用了 RSAPublicKey 格式。

     -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 SEQUENCE)。 從此點開始將所有數據復制到另一個文件,並將其用作帶有 -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

從 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

先決條件

應該安裝openssl 在 Windows 上,如果安裝了Git Bash ,請嘗試! 可以在此處找到替代二進制文件

第 1 步:從.pem提取.key

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

第 2 步:從.pem提取.crt

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

這就是我在windows上所做的。

  1. Google下載包含打開的 ssl exe 的 zip 文件
  2. 解壓 zip 文件並進入 bin 文件夾。
  3. 轉到 bin 文件夾中的地址欄並鍵入 cmd。 這將在此文件夾中打開命令提示符。
  4. 將 .pem 文件移動/放入此 bin 文件夾中。
  5. 運行兩個命令。 一個創建證書,第二個創建密鑰文件
openssl x509 -outform der -in yourPemFilename.pem -out certfileOutName.crt
openssl rsa -in yourPemFilename.pem -out keyfileOutName.key

如果您問這個問題是因為您使用的是mkcert那么訣竅是.pem文件是證書, -key.pem文件是密鑰。

(您不需要轉換,只需運行mkcert yourdomain.dev otherdomain.dev

.crt 以 pem 格式存儲證書。 所以 .pem 也可以有其他東西,比如 csr(證書簽名請求)、私鑰、公鑰或其他證書,當它只存儲證書時,與 .crt 是一樣的。

pem 是一個 base 64 編碼的文件,每個部分之間有一個頁眉和一個頁腳。

要提取特定部分,如下所示的 perl 腳本是完全有效的,但可以隨意使用一些 openssl 命令。

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

其中 ==1 可以更改為您需要的任何部分。 顯然,如果您確切地知道所需的頁眉和頁腳,並且文件中只有其中一個(通常情況下,如果您只保留證書和密鑰),您可以簡化它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM