Chuyển đổi .pem thành .crt và .key


371

Bất cứ ai có thể cho tôi biết cách / lệnh chính xác để trích xuất / chuyển đổi chứng chỉ .crtvà các .keytệp khóa riêng từ một .pemtệp? Tôi chỉ đọc chúng có thể hoán đổi cho nhau, nhưng không phải như thế nào.



Câu trả lời:


500

Tôi đã có thể chuyển đổi pem sang crt bằng cách này:

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

13
Sử dụng một trình soạn thảo văn bản không phải là cách tiếp cận tốt nhất. Để trích xuất khóa ở dạng PKCS8: openssl pkey -in mumble.pem -out mumble-key.pem Nếu phiên bản OpenSSL cũ hơn 1.0.0, để trích xuất khóa dưới dạng khóa RSA:openssl rsa -in mumble.pem -out mumble-key.pem
Andron

131
Tôi đã thử lệnh của bạn nhưng tôi đã có:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Damien Carol

15
lệnh key (openssl pkey -in mumble.pem -out mumble-key.pem) đưa ra điều này: không thể tải khóa 129051320116880: error: 0906D06C: PEM thường trình: PEM_read_bio: không có dòng bắt đầu: pem_lib.c: 703: Exp KHÓA RIÊNG TƯ
mylord

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

3
@Andron cả pkey và rsa đều cho tôi Expecting: ANY PRIVATE KEYlỗi.
Hàng không Wang Wang

393

Chuyển đổi bằng OpenSSL

Các lệnh này cho phép bạn chuyển đổi chứng chỉ và khóa thành các định dạng khác nhau để làm cho chúng tương thích với các loại máy chủ hoặc phần mềm cụ thể.

  • Chuyển đổi tệp DER (.crt .cer .der) sang PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • Chuyển đổi tệp PEM sang DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Chuyển đổi tệp PKCS # 12 (.pfx .p12) có chứa khóa riêng và chứng chỉ sang 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.
    
  • Chuyển đổi tệp chứng chỉ PEM và khóa riêng sang PKCS # 12 (.pfx .p12)

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • Chuyển đổi PEM sang CRT (tệp .CRT)

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

OpenSSL Chuyển đổi PEM

  • Chuyển đổi PEM sang DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Chuyển đổi PEM sang P7B

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • Chuyển đổi PEM sang PFX

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

OpenSSL Chuyển đổi DER

  • Chuyển đổi DER sang PEM

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

OpenSSL Chuyển đổi P7B

  • Chuyển đổi P7B sang PEM

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • Chuyển đổi P7B sang 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 Chuyển đổi PFX

  • Chuyển đổi PFX sang PEM

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

Tạo khóa rsa bằng OpenSSL

  • Sử dụng OpenSSL trên dòng lệnh trước tiên bạn cần tạo khóa chung và khóa riêng, bạn nên bảo vệ mật khẩu tệp này bằng cách sử dụng đối số vượt qua, có nhiều hình thức khác nhau mà đối số này có thể thực hiện để tham khảo tài liệu OpenSSL về điều đó.

    openssl genrsa -out private.pem 1024
    
  • Điều này tạo ra một tệp chính gọi là private.pem sử dụng 1024 bit. Tệp này thực sự có cả khóa riêng và khóa chung, vì vậy bạn nên trích xuất khóa công khai từ tệp này:

    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
    

    Bây giờ bạn sẽ có public.pem chỉ chứa khóa công khai của bạn, bạn có thể tự do chia sẻ điều này với các bên thứ 3. Bạn có thể kiểm tra tất cả bằng cách tự mã hóa thứ gì đó bằng khóa chung của mình và sau đó giải mã bằng khóa riêng của mình, trước tiên chúng tôi cần một chút dữ liệu để mã hóa:

  • Tệp ví dụ:

    echo 'too many secrets' > file.txt
    
  • Bây giờ bạn có một số dữ liệu trong file.txt, cho phép mã hóa nó bằng OpenSSL và khóa chung:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • Điều này tạo ra một phiên bản được mã hóa của file.txt gọi nó là file.ssl, nếu bạn xem tệp này thì đó chỉ là rác nhị phân, không có gì hữu ích cho bất kỳ ai. Bây giờ bạn có thể giải mã nó bằng khóa riêng:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • Bây giờ bạn sẽ có một tệp không được mã hóa trong decrypted.txt:

    cat decrypted.txt
    |output -> too many secrets
    

Tùy chọn CÔNG CỤ RSA trong OpenSSL

  • TÊN

    rsa - Công cụ xử lý khóa RSA

  • TÓM TẮC

    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] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey thừng] [-engine id]

  • SỰ MIÊU TẢ

    Lệnh rsa xử lý các khóa RSA. Chúng có thể được chuyển đổi giữa các hình thức khác nhau và các thành phần của chúng được in ra. Lưu ý lệnh này sử dụng định dạng tương thích SSLeay truyền thống để mã hóa khóa riêng: các ứng dụng mới hơn nên sử dụng định dạng PKCS # 8 an toàn hơn bằng cách sử dụng tiện ích pkcs8.

  • LỰA CHỌN

    -help
    

    In ra một thông điệp sử dụng.

    -inform DER|NET|PEM
    

    Điều này chỉ định định dạng đầu vào. Tùy chọn DER sử dụng biểu mẫu được mã hóa ASN1 DER tương thích với định dạng PKCS # 1 RSAPrivateKey hoặc SubjectPublicKeyInfo. Biểu mẫu PEM là định dạng mặc định: nó bao gồm định dạng DER base64 được mã hóa với các dòng tiêu đề và chân trang bổ sung. Trên khóa đầu vào định dạng PKCS # 8 cũng được chấp nhận. Biểu mẫu NET là một định dạng được mô tả trong phần GHI CHÚ.

    -outform DER|NET|PEM
    

    Cái này chỉ định định dạng đầu ra, các tùy chọn có cùng ý nghĩa với tùy chọn -inform.

    -in filename
    

    Cái này chỉ định tên tệp đầu vào để đọc khóa từ hoặc đầu vào tiêu chuẩn nếu tùy chọn này không được chỉ định. Nếu khóa được mã hóa, một cụm từ sẽ được nhắc.

    -passin arg
    

    nguồn mật khẩu tập tin đầu vào. Để biết thêm thông tin về định dạng của arg, hãy xem phần PASS PHRASE ARGUMENT trong openssl.

    -out filename
    

    Cái này chỉ định tên tệp đầu ra để ghi khóa hoặc đầu ra tiêu chuẩn nếu tùy chọn này không được chỉ định. Nếu bất kỳ tùy chọn mã hóa nào được đặt thì cụm từ mật khẩu sẽ được nhắc. Tên tệp đầu ra không được giống với tên tệp đầu vào.

    -passout password
    

    nguồn mật khẩu tập tin đầu ra. Để biết thêm thông tin về định dạng của arg, hãy xem phần PASS PHRASE ARGUMENT trong openssl.

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

    Các tùy chọn này mã hóa khóa riêng với mật mã được chỉ định trước khi xuất nó. Một cụm từ được nhắc cho. Nếu không có tùy chọn nào trong số này được chỉ định, khóa được viết bằng văn bản thuần túy. Điều này có nghĩa là sử dụng tiện ích rsa để đọc trong khóa được mã hóa mà không có tùy chọn mã hóa có thể được sử dụng để xóa cụm mật khẩu khỏi khóa hoặc bằng cách đặt tùy chọn mã hóa, nó có thể được sử dụng để thêm hoặc thay đổi cụm từ. Các tùy chọn này chỉ có thể được sử dụng với các tệp đầu ra định dạng PEM.

    -text
    

    in ra các thành phần khóa công khai hoặc riêng tư khác nhau trong văn bản thuần ngoài phiên bản được mã hóa.

    -noout
    

    tùy chọn này ngăn đầu ra của phiên bản được mã hóa của khóa.

    -modulus
    

    tùy chọn này in ra giá trị của mô-đun của khóa.

    -check
    

    tùy chọn này kiểm tra tính nhất quán của khóa riêng RSA.

    -pubin
    

    theo mặc định, khóa riêng được đọc từ tệp đầu vào: với tùy chọn này, khóa công khai được đọc thay thế.

    -pubout
    

    theo mặc định, khóa riêng là đầu ra: với tùy chọn này, khóa chung sẽ được xuất ra. Tùy chọn này được đặt tự động nếu đầu vào là khóa chung.

    -RSAPublicKey_in, -RSAPublicKey_out
    

    như -pubin và -pubout ngoại trừ định dạng RSAPublicKey được sử dụng thay thế.

    -engine id
    

    chỉ định một công cụ (bằng chuỗi id duy nhất của nó) sẽ khiến rsa cố gắng có được một tham chiếu chức năng cho công cụ đã chỉ định, do đó khởi tạo nó nếu cần. Công cụ sau đó sẽ được đặt làm mặc định cho tất cả các thuật toán có sẵn.

  • GHI CHÚ

    Định dạng khóa riêng PEM sử dụng các dòng đầu trang và chân trang:

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

    Định dạng khóa công khai PEM sử dụng các dòng đầu trang và chân trang:

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

    Định dạng PEM RSAPublicKey sử dụng các dòng đầu trang và chân trang:

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

    Biểu mẫu NET là một định dạng tương thích với các máy chủ Netscape cũ và các tệp Microsoft IIS .key, điều này sử dụng RC4 không được mã hóa để mã hóa. Nó không phải là rất an toàn và vì vậy chỉ nên được sử dụng khi cần thiết.

    Một số phiên bản mới hơn của IIS có dữ liệu bổ sung trong các tệp .key được xuất. Để sử dụng các tiện ích này với tiện ích, hãy xem tệp bằng trình soạn thảo nhị phân và tìm chuỗi "khóa riêng", sau đó theo dõi lại chuỗi byte 0x30, 0x82 (đây là ASN1 SEQUENCE). Sao chép tất cả dữ liệu từ thời điểm này trở đi sang tệp khác và sử dụng dữ liệu đó làm đầu vào cho tiện ích rsa với tùy chọn -inform NET.

    VÍ DỤ

    Để xóa cụm mật khẩu trên khóa riêng RSA:

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

    Để mã hóa khóa riêng bằng cách sử dụng bộ ba DES:

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

    Để chuyển đổi khóa riêng từ định dạng PEM sang DER:

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

    Để in các thành phần của khóa riêng sang đầu ra tiêu chuẩn:

      openssl rsa -in key.pem -text -noout
    

    Để chỉ xuất phần công khai của khóa riêng:

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

    Xuất phần công khai của khóa riêng ở định dạng RSAPublicKey:

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

32
Tuy nhiên, điều này không trả lời câu hỏi đó là làm thế nào để lấy khóa riêng từ chứng chỉ nhị phân (đã xuất).
bbaassssiiee

cảm ơn bạn, tự hỏi nếu tôi có PEM chứa khóa riêng và chứng chỉ, làm thế nào tôi chỉ có thể nhận được chứng chỉ? Tôi biết tôi có thể sao chép phần chứng chỉ từ nó bằng trình soạn thảo văn bản, nhưng tôi muốn biết là có lệnh openssl nào không, cảm ơn
workplaylifecycle

46

Để trích xuất khóa và cert từ tệp pem:

Trích xuất khóa

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

Một phương pháp khác để trích xuất khóa ...

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

Trích xuất tất cả các certs, bao gồm cả Chuỗi CA

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

Trích xuất chứng chỉ văn bản đầu tiên là 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 không thể tải chứng chỉ 4294956672: error: 0906D06C: PEM không có dòng bắt đầu: pem_lib.c: 708: Mong đợi: GIẤY CHỨNG NHẬN
dùng3217883

5

0. Điều kiện tiên quyết : openssl nên được cài đặt. Trên Windows, nếu Git Bashđược cài đặt, hãy thử điều đó! Các mã nhị phân thay thế có thể được tìm thấy ở đây.

1. Trích xuất .keytừ .pem:

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

2. Trích xuất .crttừ .pem:

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

1

Một .crt lưu trữ chứng chỉ .. ở định dạng pem. Vì vậy, một .pem, trong khi nó cũng có thể có những thứ khác như csr (yêu cầu ký chứng chỉ), khóa riêng, khóa chung hoặc các certs khác, khi nó chỉ lưu trữ một chứng chỉ, cũng giống như .crt.

Một pem là một tệp được mã hóa 64 cơ sở với một tiêu đề và chân trang giữa mỗi phần.

Để trích xuất một phần cụ thể, một tập lệnh perl như sau đây là hoàn toàn hợp lệ, nhưng hãy sử dụng một số lệnh openssl.

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

trong đó == 1 có thể được thay đổi thành phần bạn cần. Rõ ràng nếu bạn biết chính xác tiêu đề và chân trang bạn yêu cầu và chỉ có một trong số đó trong tệp (thường là trường hợp nếu bạn chỉ giữ chứng chỉ và khóa trong đó), bạn có thể đơn giản hóa nó:

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

0

Nếu bạn hỏi câu hỏi này bởi vì bạn đang sử dụng mkcertthì mẹo là .pemtập tin là chứng chỉ và-key.pem tập tin là chìa khóa.

(Bạn không cần chuyển đổi, chỉ cần chạy mkcert yourdomain.dev otherdomain.dev)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.