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ỉ .crt
và các .key
tệp khóa riêng từ một .pem
tệp? Tôi chỉ đọc chúng có thể hoán đổi cho nhau, nhưng không phải như thế nào.
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ỉ .crt
và các .key
tệp khóa riêng từ một .pem
tệ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:
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
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
unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Expecting: ANY PRIVATE KEY
lỗi.
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
Để trích xuất khóa và cert từ tệp pem:
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
openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
openssl x509 -in foo.pem -outform DER -out first-cert.der
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 .key
từ .pem
:
openssl pkey -in cert.pem -out cert.key
2. Trích xuất .crt
từ .pem
:
openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt
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