Apache с SSL - Как конвертировать CER в сертификаты CRT?

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

У меня есть файл *.key, но мой издатель сертификата предоставил мне файл *.cer.

Во всех документах по сети они предназначены для *.crt сертификатов.

Пожалуйста, дайте мне знать, *.cer такой же, как *.crt.

Если нет, как я могу конвертировать CER в формат CRT?

11 ответов

Решение

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

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

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

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

В основном есть два типа кодировки сертификата 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

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

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

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

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

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

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

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

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

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

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

/usr/local/share/ca-certificates/

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

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

Обновите хранилище CA:

sudo update-ca-certificates

Я предполагаю, что у вас есть файл.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 может содержать один или несколько сертификатов (возможно, всю цепочку сертификатов).

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

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

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

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

Файлы.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

Вот один случай, который сработал для меня, если нам нужно преобразовать .cer в .crt, хотя оба они контекстно одинаковы

      openssl pkcs12 -in identity.p12 -nokeys -out mycertificate.crt

где у нас должен быть действующий закрытый ключ (identity.p12) в формате PKCS 12, который я сгенерировал из хранилища ключей (файл .jks), предоставленного CA (центром сертификации), который создал мой сертификат.

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

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt
Другие вопросы по тегам