Tôi có cần chuyển đổi .CER thành .CRT cho chứng chỉ SSL Apache không? Nếu vậy, làm thế nào?


121

Tôi cần thiết lập máy chủ Apache 2 với SSL.

Tôi có tệp * .key của mình, nhưng tất cả tài liệu tôi tìm thấy trực tuyến, tệp * .crt đều được chỉ định và CA của tôi chỉ cung cấp cho tôi tệp * .cer.

Các tệp * .cer có giống với * .crt không? Nếu không, tôi có thể chuyển đổi định dạng CER sang CRT bằng cách nào?


11
CERCRTphần mở rộng không có nghĩa gì. Các nhà cung cấp PKI khác nhau sử dụng các phần mở rộng khác nhau cho cùng một thứ. Nếu tệp là nhị phân, thì có thể là ASN.1 / DER được mã hóa. Nếu con người có thể đọc được tệp, thì tệp đã được -----BEGIN CERTIFICATE-----mã hóa PEM. Bạn có gì (DER hoặc PEM), và bạn cần gì (DER hoặc PEM)?
jww

Câu trả lời:


106

Phần mở rộng tệp cho chứng chỉ mật mã không thực sự được tiêu chuẩn hóa như bạn mong đợi. Theo mặc định, Windows coi việc nhấp đúp vào .crttệp là yêu cầu nhập chứng chỉ vào kho lưu trữ Chứng chỉ gốc của Windows, nhưng xử lý .certệp là yêu cầu chỉ để xem chứng chỉ. Vì vậy, chúng khác nhau theo nghĩa Windows có một số ý nghĩa khác cố hữu đối với những gì xảy ra khi bạn nhấp đúp vào từng loại tệp.

Nhưng cách Windows xử lý chúng khi bạn nhấp đúp vào chúng là sự khác biệt duy nhất giữa cả hai. Cả hai phần mở rộng chỉ thể hiện rằng nó chứa một chứng chỉ công khai. Bạn có thể đổi tên tệp chứng chỉ để sử dụng một phần mở rộng thay cho phần mở rộng khác trong bất kỳ hệ thống hoặc tệp cấu hình nào mà tôi đã thấy. Và trên các nền tảng không phải Windows (và ngay cả trên Windows), mọi người không đặc biệt cẩn thận về việc họ sử dụng phần mở rộng nào và xử lý chúng thay thế cho nhau, vì không có sự khác biệt giữa chúng miễn là nội dung của tệp chính xác.

Làm cho mọi thứ trở nên khó hiểu hơn là có hai cách tiêu chuẩn để lưu trữ dữ liệu chứng chỉ trong một tệp: Một là mã hóa X.509 "nhị phân" và cách khác là mã hóa base64 "văn bản" thường bắt đầu bằng " -----BEGIN CERTIFICATE-----". Chúng mã hóa cùng một dữ liệu nhưng theo những cách khác nhau. Hầu hết các hệ thống đều chấp nhận cả hai định dạng, nhưng nếu cần, bạn có thể chuyển đổi định dạng này sang định dạng kia thông qua openssl hoặc các công cụ khác. Việc mã hóa trong tệp chứng chỉ thực sự độc lập với phần mở rộng mà ai đó đã cung cấp cho tệp.


Sự hiểu biết của tôi là cả hai đều là mã hóa X.509. Bạn không nói khác, nhưng việc sử dụng bất đối xứng của x.509 ở trên có thể gợi ý khác cho người đọc. Đối với người đọc, cần lưu ý rằng các chứng chỉ có thể được chuyển đổi qua lại giữa 2 bảng mã này, vì như câu trả lời này đã đề cập, chúng có cùng thông tin. Xem câu trả lời khác với các lệnh openssl x509 -inform.
FreeText

55

Theo tài liệu mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

Tệp chứng chỉ phải là tệp chứng chỉ X.509 được mã hóa PEM:

openssl x509 -inform DER -in certificate.cer -out certificate.pem

Điều này sẽ giải quyết các lỗi ssl cert, khi zscalerchạy vagranttrên win( vbox homestead), bằng cách cài đặt chứng chỉ gốc đáng tin cậy của chúng tôi vào hộp vagrant? Tôi scpsử dụng chúng, sau đó sử dụng chuyển đổi của bạn và liên kết biểu tượng chúng vào /etc/ssl/certsvà cũng sao chép nội dung vào ca-certificates.crttệp trước khi cấp lại, và tôi vẫn gặp google-recaptcha tls ssllỗi trên file_get_contentshộp dev.
blamb

54

Về cơ bản có hai kiểu mã hóa chứng chỉ CER, DER và Base64. Khi loại DER trả về lỗi tải chứng chỉ (quy trình mã hóa asn1), hãy thử PEM và nó sẽ hoạt động.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt


3
Định dạng DER phù hợp với tôi khi tệp cer của tôi trông giống như tệp nhị phân khi tôi cố gắng chỉnh sửa nó ... cảm ơn!
Brad Parks

1
Đối với người đọc, tôi thấy trang người đàn ông openssl hữu ích. Tôi không rõ ràng là lệnh nào trong số các lệnh đã thực hiện điều gì (tức là cách nào là chuyển đổi). Tham số -inform chỉ định định dạng của tệp đầu vào -in, điều này rất trực quan, nhưng nếu bạn đã hơi bối rối, rất tốt khi biết rõ ràng. Xem openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText

32

Tôi giả sử rằng bạn có tệp .cer chứa dữ liệu chứng chỉ được mã hóa PKCS # 7 và bạn muốn chuyển đổi nó thành dữ liệu chứng chỉ được mã hóa PEM (thường là tệp .crt hoặc .pem). Ví dụ: tệp .cer chứa dữ liệu được mã hóa PKCS # 7 trông giống như sau:

----- BẮT ĐẦU PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- HẾT PKCS7 -----

Dữ liệu chứng chỉ PEM trông giống như sau:

----- BẮT ĐẦU CHỨNG NHẬN -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- GIẤY CHỨNG NHẬN KẾT THÚC -----

Có một lệnh OpenSSL sẽ chuyển đổi các tệp .cer (với dữ liệu PKCS # 7) thành dữ liệu PEM mà bạn có thể gặp phải ( BEGIN CERTIFICATEkhối trong ví dụ trên). Bạn có thể ép buộc dữ liệu PKCS # 7 sang định dạng PEM bằng lệnh này trên tệp mà chúng tôi sẽ gọi là certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

Lưu ý rằng tệp .cer hoặc .pem có thể chứa một hoặc nhiều chứng chỉ (có thể là toàn bộ chuỗi chứng chỉ).


1
Sẽ rất hữu ích nếu bạn có nguồn của giả định này. Tôi nghĩ rằng mọi người sử dụng (có thể không chính xác) .cer, .crt, .pem thay thế cho nhau) nên việc có một nguồn sự thật sẽ sửa chữa những quan niệm sai lầm.
PhilT

30

CER là chứng chỉ X.509 ở dạng nhị phân, được mã hóa DER .
CRT là chứng chỉ X.509 nhị phân, được đóng gói trong mã hóa văn bản ( base-64 ).

Nó không phải là mã hóa giống nhau.


13
Câu trả lời này chỉ là sai. Cả .CER và .CRT đều có thể sử dụng mã hóa DER hoặc PEM (văn bản). Các phần mở rộng .pem và .der phản ánh mã hóa, .cer và .crt thì không. Thêm chi tiết .
eis

1
Trên thực tế, nó phải là ngược lại. Nhưng tất cả các phần mở rộng đó đã bị nhầm lẫn trong một thời gian dài, vì vậy bạn không nên dựa vào chúng.
Claudio Floreani

16

Câu trả lời cho câu hỏi làm thế nào để chuyển đổi tệp .cer thành tệp .crt (chúng được mã hóa khác nhau!) Là:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
Điều này không làm việc cho tôi! Tôi đã sử dụng:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59

Tôi nhận được thông báo lỗi này:unable to load PKCS7 object
friederbluemle

@friederbluemle bạn đã xem câu trả lời này chưa? serverfault.com/questions/417140/…
Alexander Presber

Đây là những gì tôi phải làm để chứng chỉ positiveSSL của tôi sẵn sàng được chuyển đổi thành PKCS12 để sử dụng trong Azure.
Owen

16

Tôi sử dụng lệnh:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Nhưng CER là chứng chỉ X.509 ở dạng nhị phân, được mã hóa DER. CRT là chứng chỉ X.509 nhị phân, được đóng gói trong mã hóa văn bản (base-64).

Do đó, bạn có thể nên sử dụng:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

Và sau đó để nhập chứng chỉ của bạn:

Sao chép CA của bạn sang dir:

/usr/local/share/ca-certificates/

Sử dụng lệnh:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

Cập nhật cửa hàng CA:

sudo update-ca-certificates


5

Nếu tệp chứng nhận của bạn có định dạng nhị phân, bạn phải chuyển đổi nó bằng cách

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt

3

Tệp .cer và .crt phải có thể hoán đổi cho nhau khi nhập chúng vào kho khóa.

Hãy xem nội dung của tệp .cer. Xóa bất kỳ thứ gì trước -----BEGIN CERTIFICATE-----dòng và sau -----END CERTIFICATE-----dòng. Bạn sẽ bị bỏ lại với các dòng BEGIN / END với một loạt các nội dung được mã hóa Base64 giữa chúng.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

Sau đó, chỉ cần nhập nó vào tệp key của bạn bằng keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

Điều đã giúp tôi là nhận xét của bạn về BASE-64 ENCODING. Một chứng chỉ bình thường rõ ràng là mã hóa đặc biệt và không phải văn bản thuần túy có thể đọc được. Cảm ơn.
DRapp

-2

Cứ làm đi

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
Bạn có quan tâm đến việc giải thích chính xác dòng này làm gì và tại sao bạn sử dụng chính xác các thông số đó không? Câu trả lời này khá ngắn và có thể khó hiểu đối với những người ít kinh nghiệm.
GameDroids
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.