Làm cách nào để tạo tệp PEM từ chứng chỉ SSL?
Đây là những tập tin mà tôi có sẵn:
.crt
server.csr
server.key
Làm cách nào để tạo tệp PEM từ chứng chỉ SSL?
Đây là những tập tin mà tôi có sẵn:
.crt
server.csr
server.key
Câu trả lời:
Các khóa của bạn có thể đã ở định dạng PEM, nhưng chỉ được đặt tên bằng .crt hoặc .key.
Nếu nội dung của tệp bắt đầu bằng -----BEGIN
và bạn có thể đọc nó trong trình soạn thảo văn bản:
Tệp sử dụng base64, có thể đọc được ở ASCII, không phải định dạng nhị phân. Chứng chỉ đã ở định dạng PEM. Chỉ cần thay đổi phần mở rộng thành .pem.
Nếu tệp ở dạng nhị phân:
Đối với server.crt, bạn sẽ sử dụng
openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem
Đối với server.key, sử dụng openssl rsa
thay cho openssl x509
.
Server.key có khả năng là khóa riêng của bạn và tệp .crt là chứng chỉ x509 được trả lại, đã ký, x509.
Nếu đây là cho một máy chủ Web và bạn không thể chỉ định tải một khóa riêng và khóa chung:
Bạn có thể cần nối hai tệp. Đối với việc sử dụng này:
cat server.crt server.key > server.includesprivatekey.pem
Tôi sẽ khuyên bạn nên đặt tên tệp với "gồmprivatekey" để giúp bạn quản lý các quyền bạn giữ với tệp này.
cat server.crt server.key > server.pem
sẽ không đặt bình luận mở trên dòng riêng của mình, đó dường như là một yêu cầu. Chuyển phát nhanh đã cho tôi địa ngục và tôi đã mất nhiều giờ để tìm ra điều gì đang xảy ra.
server.crt server.key > server.includesprivatekey.pem
rất hữu ích cho SSL với haproxy 1.5.
Tôi cần phải làm điều này cho ELS AWS. Sau khi bị đánh đập bởi hộp thoại nhiều lần, cuối cùng đây là điều làm việc cho tôi:
openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem
Cảm ơn NCZ
Chỉnh sửa: Như @floatingrock nói
Với AWS, đừng quên thêm tên tệp vào file://
. Vì vậy, nó sẽ trông như:
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-cert ve.html
file://
. Vì vậy, nó sẽ trông giống như:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
Một pem
tập tin chứa chứng chỉ và khóa riêng. Nó phụ thuộc vào định dạng chứng chỉ / khóa của bạn, nhưng có lẽ nó đơn giản như thế này:
cat server.crt server.key > server.pem
-bash: server.key.pem: Permission denied
Ngoài ra, nếu bạn không muốn nó yêu cầu cụm mật khẩu, thì cần chạy lệnh sau:
openssl rsa -in server.key -out server.key
-----BEGIN RSA PRIVATE KEY-----
và có một tập tin bắt đầu bằng -----BEGIN ENCRYPTED PRIVATE KEY-----
, đây là lệnh bạn muốn sử dụng.
Những gì tôi đã quan sát là: nếu bạn sử dụng openssl để tạo chứng chỉ, nó sẽ chụp cả phần văn bản và phần chứng chỉ base64 trong tệp crt. Định dạng pem nghiêm ngặt nói ( định nghĩa wiki ) rằng tệp sẽ bắt đầu và kết thúc bằng BEGIN và END.
.pem - (Thư được tăng cường bảo mật) Chứng chỉ DER được mã hóa Base64, được đính kèm giữa "----- BEGIN CHỨNG NHẬN -----" và "----- CHỨNG NHẬN KẾT THÚC -----"
Vì vậy, đối với một số thư viện (tôi gặp phải điều này trong java) mong đợi định dạng pem nghiêm ngặt, crt được tạo sẽ không xác thực dưới dạng 'định dạng pem không hợp lệ'.
Ngay cả khi bạn sao chép hoặc grep các dòng bằng BEGIN / END CERTIFICATE và dán nó vào tệp cert.pem, nó vẫn hoạt động.
Đây là những gì tôi làm, không sạch lắm, nhưng hoạt động với tôi, về cơ bản, nó lọc văn bản bắt đầu từ dòng BEGIN:
grep -A 1000 BEGIN cert.crt> cert.pem
openssl x509
. Nó sẽ xuất ra một chứng chỉ PEM hợp lệ: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
trong trường hợp này. Để giải thích rằng: "-n" bảo sed không in bất cứ thứ gì theo mặc định, và sau đó biểu thức phạm vi /--BEGIN/,$
làm cho p
lệnh (in) áp dụng cho các dòng giữa dòng đầu tiên chứa --BEGIN
và cuối tệp ( $
).
Tôi đã cố gắng đi từ godaddy đến công cụ ứng dụng. Bí quyết đã làm gì khi sử dụng dòng này:
openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr
Chính xác là như vậy, nhưng thay thế tên bằng tên miền của tôi (không phải là nó thực sự quan trọng)
Và tôi đã trả lời tất cả các câu hỏi liên quan đến tên / tổ chức chung là www.name.com
Sau đó, tôi mở csr, sao chép nó, dán nó vào go Daddy, sau đó tải xuống, giải nén nó, điều hướng đến thư mục được giải nén với thiết bị đầu cuối và nhập:
cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt
Sau đó, tôi đã sử dụng các hướng dẫn này từ Sự cố với SSL Miền tùy chỉnh của Google Apps , đó là:
openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem
chính xác như vậy, ngoại trừ thay vì privateKey.key tôi đã sử dụng name.unencrypted.priv.key và thay vì www_mydomain_com.crt, tôi đã sử dụng name.crt
Sau đó, tôi đã tải lên public.pem lên bảng điều khiển quản trị cho "Chứng chỉ X.509 được mã hóa PEM" và tải lên private.pem cho "Khóa riêng RSA được mã hóa PEM không mã hóa" ..
.. Và điều đó cuối cùng đã làm việc.
Cố gắng tải chứng chỉ GoDaddy lên AWS tôi đã thất bại nhiều lần, nhưng cuối cùng thì nó khá đơn giản. Không cần phải chuyển đổi bất cứ điều gì sang .pem. Bạn chỉ cần chắc chắn bao gồm chứng chỉ gói GoDaddy trong tham số chuỗi, ví dụ:
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
Và để xóa tải lên thất bại trước đó của bạn, bạn có thể làm
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.
Chạy các lệnh dưới đây:
a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes
,
b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts
openssl pkcs12 -in Your_CERTIFICATE.p12 -out Your_CERTIFICATE.pem -nodes -clcerts
.pem
sang.crt
và.key
.