Làm cách nào để lấy tệp .pem từ tệp .key và .crt?


Câu trả lời:


800

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 -----BEGINvà 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 rsathay 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.


2
Kiểm tra định dạng của server.key. Tôi chỉ cho rằng đó là RSA. Nhưng đọc dòng đầu tiên của tập tin có thể sẽ cho bạn biết điều đó.
maxwellb

10
Chỉ cần một người đứng đầu cat server.crt server.key > server.pemsẽ 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.
Graham Walters

1
Cảm ơn Graham. Các công cụ khác nhau sẽ tạo ra các tệp khác nhau, và cuối cùng, một số xác minh là tốt. Khi tôi thực hiện các bước này, các tệp đã kết thúc bằng một dòng mới, ví dụ.
maxwellb

Mẹo về ghép các tệp .crt và .key lại với nhau rất hữu ích. Tôi muốn sử dụng chứng chỉ của mình với stunnel3, nhưng nó không có cách nào để chỉ định tệp chính. Sử dụng kết nối làm việc. (Trên thực tế, kể từ khi stunnel3 là một chương trình Perl, tôi đã thêm một tùy chọn để nó bản thân mình để đọc các tập tin quan trọng Tuy nhiên, kể từ khi tôi nhìn thấy sau đó nối làm việc, tôi đã quay trở stunnel3 mã ban đầu của nó..)
LS

2
Chỉ cần một cú va chạm để nói rằng con mèo server.crt server.key > server.includesprivatekey.pemrất hữu ích cho SSL với haproxy 1.5.
jimm101

224

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


19
Với AWS, đừng quên thêm tên tệp vào 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/
FloatingRock

1
Lệnh thứ hai không làm gì nếu đầu vào của bạn là tệp pem, vì vậy, giả sử là vậy, bạn chỉ cần lệnh đầu tiên
Kristofer

Tuyệt vời! Điều này làm việc tốt cho tôi! Chỉ cần chuyển đổi các tệp .key và .crt của tôi thành .pem bằng các dòng mã của bạn và sau đó tôi đã tải lên (sao chép / dán) thông qua bảng điều khiển AWS. Cảm ơn!
Diego D

79

Một pemtậ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

tôi tiếp tục nhận được-bash: server.key.pem: Permission denied
tq

2
@tq: Điều đó có nghĩa là bạn không được phép đọc hoặc ghi tệp đó.
sth

cảm ơn bạn @sth sẽ tìm kiếm sự cho phép. nhưng tôi đã làm điều này với các lệnh sudo
tq

8
@tq: máy chủ mèo.crt server.key | sudo tee server.pem
dimir

2
coi chừng thiếu tin mới, tập tin pem của bạn có thể bị cắt xén các dòng như ----- END CHỨNG NHẬN ---------- BEGIN CHỨNG NHẬN -----
Wolfgang Fahl

24

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

9
Nếu bạn muốn một tập tin bắt đầu -----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.
Philippe Gerber

18

đây là tùy chọn tốt nhất để tạo tệp .pem

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

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


1
tùy chọn khác chỉ đơn giản là để vượt qua chứng chỉ không nghiêm ngặt thông qua openssl x509. Nó sẽ xuất ra một chứng chỉ PEM hợp lệ: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

Nếu bạn muốn đưa mọi thứ từ "BEGIN" đến cuối tập tin, đó là một công việc dành cho sed. Cụ thể, bạn muốn một cái gì đó như sed -n '/--BEGIN/,$p' cert.crttrong 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 plệnh (in) áp dụng cho các dòng giữa dòng đầu tiên chứa --BEGINvà cuối tệp ( $).
dannysauer

4

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.


4

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

Điều này không hiệu quả với tôiAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis

4
  1. Tải xuống chứng chỉ từ cổng thông tin tạm thời của appleId,
  2. Xuất chứng chỉ từ Chuỗi khóa và đặt tên (Chứng chỉ.p12),
  3. Mở thiết bị đầu cuối và thư mục goto nơi bạn lưu ở trên tệp Chứng chỉ.p12,
  4. 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

  5. Tệp .pem của bạn đã sẵn sàng "pushcert.pem".

0
  • Mở thiết bị đầu cuối.
  • Chuyển đến thư mục nơi chứng chỉ của bạn được đặt.
  • Thực hiện lệnh dưới đây bằng cách thay thế tên bằng chứng chỉ của bạn.

openssl pkcs12 -in Your_CERTIFICATE.p12 -out Your_CERTIFICATE.pem -nodes -clcerts

  • Hy vọng nó sẽ làm việc !!
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.