it-swarm-vi.tech

Tệp Pem là gì và nó khác với các Định dạng tệp khóa được tạo bằng OpenSSL khác 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 sẽ Google hướng dẫn và đánh bại cho đến khi cuối cùng nó hoạt động.

Tuy nhiên, trong các tìm kiếm của tôi, tôi thường bắt 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 thấy một lời giải thích tốt về mục đích của mỗi đị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?

1413
Noah Goodrich

SSL đã tồn tại đủ lâu, bạn nghĩ rằng sẽ có sự đồng ý về các định dạng chứa. Và bạn nói đúng, có. Quá nhiều tiêu chuẩn như 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ẽ hòa nhập.

  • . Csr - Đây là Yêu cầu ký chứng chỉ. Một số ứng dụng có thể tạo ra chúng để nộp cho cơ quan cấp chứng chỉ. Định dạng thực tế là PKCS10 được xác định 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, chẳng hạn như chủ đề, tổ chức, trạng thái, không có gì, cũng như khóa công khai của chứng chỉ để được ký. Chúng được ký bởi CA và một chứng chỉ được trả lại. Chứng chỉ được trả về là công khai chứng chỉ (bao gồm khóa chung nhưng không phải khóa riêng), bản thân nó có thể có một vài định dạng.
  • . Pem - Được xác định trong RFC 1421 đến 1424 , đây là định dạng chứa có thể bao gồm chỉ chứng chỉ chung (chẳng hạn như với cài đặt Apache và 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 chung, khóa riêng và chứng chỉ gốc. Một cách khó hiểu, nó cũng có thể mã hóa 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ư được tăng cường bảo mật (PEM) , một phương pháp thất bại cho email an toàn nhưng định dạng chứa nó được sử dụng và là bản dịch cơ sở64 của các khóa AS50.1 x509.
  • . Key - Đây là tệp được định dạng PEM chỉ chứa khóa riêng của chứng chỉ cụ thể và chỉ là tên thông thường và không phải là tên chuẩn. Trong các bản cài đặt Apache, cái này thường nằm trong /etc/ssl/private. Các quyền trên 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 bị đặt sai.
  • . Pkcs12 .pfx .p12 - Được xác định ban đầu bởi RSA trong Tiêu chuẩn mã hóa khóa công khai (viết tắt PKCS), " Biến thể 12 "ban đầu được Microsoft cải tiến và sau đó được gửi dưới dạng RFC 7292 . Đây là một định dạng chứa mật khẩu chứa cả cặp chứng chỉ chung và riêng. Không giống như các tệp .pem, thùng chứa này được mã hóa hoàn toàn. Openssl có thể biến tệp này thành tệp .pem có cả khóa chung và khóa riêng: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Một vài định dạng khác xuất hiện 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 đây là các tệp Chứng chỉ. Theo mặc định, Windows sẽ xuất các chứng chỉ dưới dạng các tệp được định dạng .DER với một phần mở rộng khác nhau. Giống...
  • . cert .cer .crt - Một tệp được định dạng .pem (hoặc hiếm khi .der) với một phần mở rộng khác nhau, một phần mở rộng được Windows Explorer nhận ra là một Giấy chứng nhận, mà .pem thì không.
  • . P7b .keystore - Được xác định trong RFC 2315 dưới dạng PKCS số 7, đây là định dạng được Windows sử dụng để trao đổi chứng chỉ. Java hiểu các nguyên bản này và thường sử dụng .keystore như một phần mở rộng thay thế. Không giống như chứng chỉ kiểu .pem, định dạng này có cách được xác định để bao gồm chứng chỉ đường dẫn chứng nhận.
  • . crl - Danh sách thu hồi chứng chỉ. Cơ quan cấp chứng chỉ sản xuất những thứ này như một cách để ủy quyền lại chứng chỉ trước khi hết hạn. Đôi khi bạn có thể tải chúng từ các trang web CA.

Tóm lại, có bốn cách khác nhau để trình bày 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 tốt hơ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 tiêu chuẩn mở được sử dụng bởi Java và được Windows hỗ trợ. Không chứa tài liệu khóa riêng.
  • PKCS12 - Một tiêu chuẩn riêng của Microsoft mà sau này được xác định trong RFC cung cấp bảo mật nâng cao so với định dạng PEM văn bản thuần túy. Điều này có thể chứa tài liệu khóa riêng. Nó được các hệ thống Windows ưu tiên sử dụng và có thể được chuyển đổi tự do sang định dạng PEM thông qua việc sử dụng openssl.
  • [~ # ~] der [~ # ~] - Định dạng chính của PEM. Thật hữu ích khi nghĩ về nó như một phiên bản nhị phân của tệp PEM được mã hóa cơ sở64. Không được sử dụng thường xuyên bên ngoài Windows.

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

1730
sysadmin1138

PEM tự 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 xác định bằng ASN.1), được mã hóa bằng ASN.1 DER (quy tắc mã hóa phân biệt), sau đó chạy qua mã hóa Base64 và bị mắc kẹt giữa các dòng neo văn bản đơn giản (BEGIN CERTIFICATE và END CERTIFICATE ).

Bạn có thể biểu diễn cùng một dữ liệu bằng cách sử dụng các biểu 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.

Lợi ích rõ ràng của PEM là an toàn khi dán vào phần thân của email vì nó có các dòng neo và sạch 7 bit.

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

146
James F

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

57
mgold