Нужно ли мне конвертировать .CER в .CRT для сертификатов SSL Apache? Если да, то как?


121

Мне нужно настроить сервер Apache 2 с SSL.

У меня есть файл * .key, но вся документация, которую я нашел в Интернете, указаны файлы * .crt, а мой центр сертификации предоставил мне только файл * .cer.

Файлы * .cer - это то же самое, что * .crt? Если нет, как я могу преобразовать CER в формат CRT?


11
CERа CRTрасширения ничего не значат. Разные поставщики PKI используют разные расширения для одного и того же. Если файл двоичный, то, вероятно, он закодирован в ASN.1 / DER. Если файл доступен для чтения человеком -----BEGIN CERTIFICATE-----, то его кодировка PEM. Что у вас есть (DER или PEM) и что вам нужно (DER или PEM)?
jww 09

Ответы:


107

Расширения файлов для криптографических сертификатов на самом деле не так стандартизированы, как можно было бы ожидать. Windows по умолчанию обрабатывает двойной щелчок по .crtфайлу как запрос на импорт сертификата в хранилище корневых сертификатов Windows, но обрабатывает .cerфайл как запрос только на просмотр сертификата. Итак, они разные в том смысле, что Windows имеет различное значение для того, что происходит, когда вы дважды щелкаете каждый тип файла.

Но то, как Windows обрабатывает их, когда вы дважды щелкаете по ним, - это почти единственная разница между ними. Оба расширения просто представляют, что они содержат публичный сертификат. Вы можете переименовать файл сертификата, чтобы использовать одно расширение вместо другого в любой системе или файле конфигурации, который я видел. А на платформах, отличных от Windows (и даже в Windows), люди не особо заботятся о том, какое расширение они используют, и рассматривают их как взаимозаменяемые, поскольку между ними нет разницы, если содержимое файла правильное.

Еще больше сбивает с толку то, что существует два стандартных способа хранения данных сертификата в файле: один - «двоичная» кодировка X.509, а другой - «текстовая» кодировка base64, которая обычно начинается с « -----BEGIN CERTIFICATE-----». Они кодируют одни и те же данные, но по-разному. Большинство систем принимают оба формата, но при необходимости вы можете преобразовать один в другой с помощью openssl или других инструментов. Кодировка в файле сертификата действительно не зависит от того, какое расширение кто-то дал файлу.


Насколько я понимаю, это обе кодировки X.509. Вы не говорите иначе, но асимметричное использование x.509 выше может подсказать читателю иное. Читателю стоит отметить, что сертификаты можно преобразовывать туда и обратно между этими двумя кодировками, потому что, как упоминается в этом ответе, они содержат одинаковую информацию. См. Другой ответ с помощью команд openssl x509 -inform.
FREETEXT

55

Согласно документации mod_ssl :

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

Файл сертификата должен быть файлом сертификата X.509 в кодировке PEM:

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

Решит ли это ошибки сертификатов ssl, если они zscalerработают vagrantна win( vbox homestead), установив наши доверенные корневые сертификаты в бродячий ящик? Я использовал scpих, затем использовал ваше преобразование и связал их с ними, /etc/ssl/certsа также скопировал содержимое в ca-certificates.crtфайл перед повторной инициализацией, и все равно я получаю сообщение google-recaptcha tls sslоб ошибке file_get_contentsв окне разработчика.
blamb 08

54

В основном существует два типа кодировки сертификатов CER: DER и Base64. Когда тип DER возвращает сертификат загрузки с ошибкой (процедуры кодирования asn1), попробуйте PEM, и он должен работать.

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

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


3
Формат DER работал у меня, когда мой файл cer выглядел как двоичный, когда я пытался его отредактировать ... спасибо!
Брэд Паркс

1
Для читателя я нашел справочную страницу openssl полезной. Мне было непонятно, какая из команд что делает (т.е. в каком направлении происходит преобразование). Параметр -inform указывает формат входного файла -in, который интуитивно понятен, но если вы уже немного запутались, неплохо знать явно. См openssl.org/docs/manmaster/man1/openssl-x509.html
FREETEXT

32

Я предполагаю, что у вас есть файл .cer, содержащий данные сертификата в кодировке PKCS # 7, и вы хотите преобразовать его в данные сертификата в кодировке PEM (обычно файл .crt или .pem). Например, файл .cer, содержащий данные в кодировке PKCS # 7, выглядит так:

----- НАЧАТЬ PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- КОНЕЦ PKCS7 -----

Данные сертификата PEM выглядят так:

----- НАЧАТЬ СЕРТИФИКАТ -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- КОНЕЦ СЕРТИФИКАТА -----

Существует команда OpenSSL, которая преобразует файлы .cer (с данными PKCS # 7) в данные PEM, которые вы, возможно, ожидаете встретить ( BEGIN CERTIFICATEблок в приведенном выше примере). Вы можете принудительно преобразовать данные PKCS # 7 в формат PEM с помощью этой команды в файле, который мы назовем certfile.cer:

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

Обратите внимание, что файл .cer или .pem может содержать один или несколько сертификатов (возможно, всю цепочку сертификатов).


1
Было бы удобно, если бы у вас был источник этого предположения. Я думаю, что люди используют (возможно, неправильно) .cer, .crt, .pem взаимозаменяемо), поэтому наличие источника правды исправит неправильные представления.
PhilT

30

CER - это сертификат X.509 в двоичной форме в кодировке DER .
CRT - это двоичный сертификат X.509, заключенный в текстовую ( base-64 ) кодировку.

Это не та кодировка.


13
Это неверный ответ. И .CER, и .CRT могут использовать кодировку DER или PEM (текст). Расширения .pem и .der отражают кодировку, а .cer и .crt - нет. Подробнее .
eis

1
На самом деле должно быть наоборот. Но все эти расширения путали давно, поэтому полагаться на них не стоит.
Claudio Floreani 04

16

Ответ на вопрос, как преобразовать файл .cer в файл .crt (они кодируются по-разному!):

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

5
Это не сработало для меня! Я использовал:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59

Я получаю это сообщение об ошибке:unable to load PKCS7 object
Friederbluemle

@friederbluemle вы читали этот ответ? serverfault.com/questions/417140/…
Александр Пресбер

Это то, что мне нужно было сделать, чтобы мой сертификат PositiveSSL был готов к преобразованию в PKCS12 для использования в Azure.
Оуэн,

16

Я использую команду:

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

Но CER - это сертификат X.509 в двоичной форме, закодированный в DER. CRT - это двоичный сертификат X.509, заключенный в текстовую (base-64) кодировку.

Из-за этого вам, возможно, следует использовать:

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

А затем импортировать сертификат:

Скопируйте свой ЦС в каталог:

/usr/local/share/ca-certificates/

Используйте команду:

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

Обновите магазин CA:

sudo update-ca-certificates


5

Если ваш файл cer имеет двоичный формат, вы должны преобразовать его с помощью

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

3

Файлы .cer и .crt должны быть взаимозаменяемыми при их импорте в хранилище ключей.

Взгляните на содержимое файла .cer. Сотрите все, что находится перед -----BEGIN CERTIFICATE-----линией и после -----END CERTIFICATE-----нее. У вас останутся строки BEGIN / END с кучей файлов в кодировке Base64 между ними.

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

Затем просто импортируйте его в свой ключевой файл с помощью keytool.

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

Мне помогли ваши комментарии о BASE-64 ENCODING. Нормальный сертификат, по-видимому, представляет собой специальную кодировку, а не читаемый текст. Спасибо.
DRapp 01

-2

Просто сделать

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

8
Не могли бы вы уточнить, что именно делает эта строка и почему именно вы используете эти параметры? Этот ответ довольно короткий и может быть трудным для понимания людям с меньшим опытом.
GameDroids
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.