Câu hỏi Tệp Pem là gì và nó khác với các định dạng tệp khóa do OpenSSL tạo ra như thế nào?


Tôi chịu trách nhiệm duy trì hai máy chủ Debian. Mỗi khi tôi phải làm bất cứ điều gì với chứng chỉ bảo mật, tôi Google cho hướng dẫn và đánh bại cho đến khi nó hoạt động.

Tuy nhiên, trong các tìm kiếm của tôi, tôi thường gặp các định dạng tệp khác nhau (.key, .csr, .pem) nhưng tôi chưa bao giờ có thể tìm được giải thích tốt về mục đích của từng định dạng tệp.

Tôi đã tự hỏi nếu những người tốt ở đây tại ServerFault có thể cung cấp một số làm rõ về vấn đề này?


1173
2018-05-19 02:24


gốc


stackoverflow.com/a/45886431/1599699 - Andrew


Các câu trả lời:


SSL đã tồn tại đủ lâu để bạn nghĩ rằng sẽ có thỏa thuận về các định dạng vùng chứa. Và bạn nói đúng, có. Quá nhiều tiêu chuẩn khi nó xảy ra. Vì vậy, đây là những gì tôi biết, và tôi chắc chắn những người khác sẽ kêu vang.

  • .csr - Đây là Yêu cầu ký chứng chỉ. Một số ứng dụng có thể tạo các ứng dụng này để gửi tới cơ quan cấp chứng chỉ. Định dạng thực tế là PKCS10 được định nghĩa trong RFC 2986. Nó bao gồm một số / tất cả các chi tiết chính của chứng chỉ được yêu cầu như chủ đề, tổ chức, tiểu bang, điều gì, cũng như khóa công khai của chứng chỉ để được ký. Chúng được ký bởi CA và chứng chỉ được trả về. Chứng chỉ được trả về là công khai chứng chỉ (bao gồm khóa công khai nhưng không phải khóa riêng), bản thân nó có thể ở một vài định dạng.
  • .pem - Được xác định trong RFC 1421 xuyên qua 1424, đây là định dạng vùng chứa có thể chỉ bao gồm chứng chỉ công khai (chẳng hạn như với các cài đặt Apache và các tệp chứng chỉ CA /etc/ssl/certs) hoặc có thể bao gồm toàn bộ chuỗi chứng chỉ bao gồm khóa công khai, khóa cá nhân và chứng chỉ gốc. Nhầm lẫn, nó cũng có thể mã hóa một CSR (ví dụ như được sử dụng đây) vì định dạng PKCS10 có thể được dịch sang PEM. Tên là từ Thư nâng cao bảo mật (PEM), một phương pháp không thành công cho email an toàn nhưng định dạng vùng chứa được sử dụng trong cuộc sống và là bản dịch base64 của các khóa ASN.1 x509.
  • .Chìa khóa - Đây là tệp được định dạng PEM chỉ chứa khóa riêng của một chứng chỉ cụ thể và chỉ đơn thuần là tên thông thường và không phải là tên được chuẩn hóa. Trong cài đặt Apache, điều này thường nằm trong /etc/ssl/private. Quyền đối với các tệp này rất quan trọng và một số chương trình sẽ từ chối tải các chứng chỉ này nếu chúng được đặt sai.
  • .pkcs12 .pfx .p12 - Ban đầu được xác định bởi RSA trong Tiêu chuẩn mật mã khóa công khai (viết tắt là PKCS), biến thể "12" ban đầu được Microsoft tăng cường và sau đó được gửi dưới dạng RFC 7292. Đây là định dạng vùng chứa có mật khẩu chứa cả cặp chứng chỉ công khai và riêng tư. Không giống như tệp .pem, vùng chứa này được mã hóa hoàn toàn. Openssl có thể biến điều này thành tệp .pem với cả khóa công cộng và khóa riêng tư: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes 

Một vài định dạng khác hiển thị theo thời gian:

  • .der - Một cách để mã hóa cú pháp ASN.1 trong tệp nhị phân, tệp .pem chỉ là tệp .der được mã hóa Base64. OpenSSL có thể chuyển đổi chúng thành .pem (openssl x509 -inform der -in to-convert.der -out converted.pem). Windows xem các tệp này dưới dạng tệp Chứng chỉ. Theo mặc định, Windows sẽ xuất chứng chỉ dưới dạng .DER định dạng tệp có phần mở rộng khác. Như...
  • .cert .cer .crt - Tệp có định dạng .pem (hoặc hiếm khi .der) có phần mở rộng khác, một tệp được Windows Explorer nhận dạng dưới dạng chứng chỉ, .pem không phải.
  • .p7b .keystore - Được xác định trong RFC 2315 là PKCS số 7, đây là định dạng được Windows sử dụng để trao đổi chứng chỉ. Java hiểu những nguyên bản này và thường sử dụng .keystore dưới dạng tiện ích mở rộng thay thế. Không giống như chứng chỉ kiểu .pem, định dạng này có xác định cách để bao gồm chứng chỉ đường dẫn chứng nhận.
  • .crl - Danh sách thu hồi chứng chỉ. Tổ chức phát hành chứng chỉ sản xuất chúng như một cách để không cho phép chứng chỉ trước khi hết hạn. Đôi khi bạn có thể tải xuống từ các trang web của CA.

Tóm lại, có bốn cách khác nhau để trình bày các chứng chỉ và các thành phần của chúng:

  • PEM - Được quản lý bởi RFC, được sử dụng ưu tiên bởi phần mềm nguồn mở. Nó có thể có nhiều phần mở rộng (.pem, .key, .cer, .cert, v.v.)
  • PKCS7 - Một chuẩn mở được sử dụng bởi Java và được hỗ trợ bởi Windows. Không chứa tài liệu khóa cá nhân.
  • PKCS12 - Một tiêu chuẩn riêng tư của Microsoft mà sau này được định nghĩa trong RFC cung cấp bảo mật nâng cao so với định dạng PEM thuần văn bản. Điều này có thể chứa tài liệu khóa riêng. Nó được ưu tiên sử dụng bởi các hệ thống Windows, và có thể được tự do chuyển đổi sang định dạng PEM thông qua việc sử dụng openssl.
  • DER - Định dạng gốc của PEM. Sẽ rất hữu ích khi nghĩ nó như một phiên bản nhị phân của tệp PEM được mã hóa base64. Không thường xuyên được sử dụng rất nhiều bên ngoài Windows.

Tôi hi vọng cái này giúp được.


1449
2018-05-19 02:49



Điều tuyệt vời về tiêu chuẩn là có rất nhiều thứ để lựa chọn ... - squillman
.crt là một phần mở rộng phổ biến khác cho .cert và .cer - David Pashley
PEM là một định dạng tệp có thể bao gồm chứng chỉ (còn gọi là khóa công cộng), khóa riêng hoặc thực sự được ghép nối với nhau. Đừng chú ý nhiều đến phần mở rộng tập tin; nó có nghĩa là Privacy Enhanced Mail, một sử dụng nó không thấy sử dụng nhiều cho nhưng định dạng tập tin bị mắc kẹt xung quanh. - Dan Carley
Câu trả lời rất hữu ích, nhưng tôi không nghĩ bạn đã bao gồm định dạng .pub được tạo bởi ssh-keygen. Sẽ hữu ích khi biết mối quan hệ đó với phần còn lại. - Jez
Không thể không nhận thấy "Email nâng cao bảo mật" sẽ cung cấp từ viết tắt "PEE" thay cho "PEM". RFC có xu hướng sử dụng cụm từ "Thư nâng cao bảo mật" - aidan


PEM trên riêng của nó không phải là một chứng chỉ, nó chỉ là một cách để mã hóa dữ liệu. Chứng chỉ X.509 là một loại dữ liệu thường được mã hóa bằng PEM.

PEM là chứng chỉ X.509 (có cấu trúc được định nghĩa bằng ASN.1), được mã hóa bằng cách sử dụng ASN.1 DER (quy tắc mã hóa phân biệt), sau đó chạy qua mã hóa Base64 và bị kẹt giữa các dòng neo thuần văn bản (BEGIN CERTIFICATE và END CERTIFICATE ).

Bạn có thể trình bày cùng một dữ liệu bằng cách sử dụng đại diện PKCS # 7 hoặc PKCS # 12 và tiện ích dòng lệnh openssl có thể được sử dụng để thực hiện việc này.

Những lợi ích rõ ràng của PEM là an toàn để dán vào phần thân của email vì nó có các đường neo và sạch 7-bit.

RFC1422 có thêm chi tiết về tiêu chuẩn PEM vì nó liên quan đến khóa và chứng chỉ.


123
2018-06-06 15:19



Làm thế nào để bạn làm điều này "bằng cách sử dụng openssl dòng lệnh"? - Samik R
Để chuyển đổi một tệp DER (.crt .cer .der) thành PEM: openssl x509 -inform der -in cert.cer -out cert.pem. Để chuyển đổi tệp PEM thành DER: openssl x509 -outform der -in cert.pem -out certi.der. Để chuyển đổi tệp PKCS # 12 (.pfx .p12) chứa khóa cá nhân và chứng chỉ cho PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Để chuyển đổi tệp chứng chỉ PEM và khóa cá nhân thành PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crt Từ đây - mpeac


Đôi khi một .crt tệp đã là .pem. Xem: https://stackoverflow.com/questions/991758/openssl-pem-key


51
2018-03-15 00:24



Thật vậy, tôi mới nhận thấy điều này ngày hôm nay. Tôi đã phải nhập một giấy chứng nhận PEM trong loadspaceancer rackspace và tôi đã tự hỏi nếu crt được tạo ra trong định dạng đó. Nhưng nó đã làm việc như vậy, do đó, đó là kết luận của tôi là tốt, hầu hết các .crt của đến định dạng PEM có vẻ như. - Glenn Plas