Как конвертировать SSL-сертификат в нужный формат
Чтобы вы могли без проблем пользоваться SSL-сертификатом на разных платформах и устройствах, иногда требуется изменить его формат. Дело в том, что некоторые форматы лучше подходят для работы с различными видами программного обеспечения. Далее мы расскажем о том, какие форматы бывают, в каких случаях используются и какими способами можно конвертировать один формат сертификата в другой.
Форматы сертификатов
Существует четыре основных формата сертификатов:
PEM — популярный формат используемый Центрами Сертификации для выписки SSL-сертификатов.
Сертификаты PEM подходят для установки на веб-серверы nginx, apache2.
DER — это бинарная форма сертификата PEM.
Сертификаты DER подходят для установки на серверы Java.
В файлах содержатся строки вида
Сертификаты P7B подходят для установки на серверы MS Windows, Java Tomcat
Сертификаты PFX подходят для установки на серверы Windows, в частности Internet Information Services(IIS).
Способы конвертации
Существует несколько способов конвертации сертификатов, которые отличаются между собой только простотой конвертирования и уровнем безопасности. Мы расскажем о трех из них.
Конвертация SSl сертификатов посредством OpenSSL
OpenSSL — это надежный, коммерческий и полнофункциональный инструментарий для протоколов Transport Layer Security (TLS) и Secure Sockets Layer (SSL). А также библиотека криптографии общего назначения. Конвертация с использованием библиотеки OpenSSL считается одним из самых безопасных способов: все данные будет сохранены непосредственно на устройстве, на котором будут выполняться операции по конвертированию.
Для того чтобы воспользоваться им, вам необходимо перейти в командную строку и выполнить команды.
Предоставленные ниже примеры команд OpenSSL позволяют конвертировать сертификаты и ключи в нужный формат.
Конвертировать PEM в DER можно посредством команды:
Аналогично, для других типов:
PEM в P7B
PEM в PFX
Обращаем ваше внимание, что после выполнения команды, будет запрошена установка пароля ключа.
DER в PEM
P7B в PEM
P7B в PFX
PFX в PEM
Конвертация при помощи онлайн-сервисов
Для конвертации сертификатов самый удобный способ — использование специальных сайтов, например, https://ssl4less.ru/ssl-tools/convert-certificate.html
Этот способ считается наименее безопасным методом: никогда не знаешь, сохраняет ли автор сайта ваш приватный ключ при конвертации.
Чтобы воспользоваться этим способом, вы просто переходите по ссылке на нужный сайт, выбираете нужные вам форматы и прикрепляете файл или файлы сертификата.
Конвертация с PEM в DER

Конвертация с PEM в P7B

В этом случае существует возможность добавить также цепочку сертификатов.
Что такое цепочка сертификатов и для чего она нужна, можно узнать в статье «Что такое корневой сертификат»
Конвертация с PEM в PFX

В этом случае необходимо обратить внимание на то, что обязателен ключ сертификата, а также необходимо установить пароль ключа.
Конвертация из DER в PEM

Конвертация из P7B в PEM

Конвертация из P7B в PFX

Конвертация из PFX в PEM

Конвертация скриптом openssl-ToolKit
OpenSSL ToolKit — скрипт, который облегчает работу с библиотекой OpenSSL. Работа со скриптом является безопасным решением, т.к сертификаты и ключи сертификата никуда не передаются, а используются непосредственно на вашем сервере.
Для начала работы скрипт необходимо скачать и запустить. Сделать это можно одной командой:
После выполнения команды откроется следующее окно:

Нас интересует пункт 2. Convert certificates
После перехода в пункт 2. появится следующее меню, с выбором нужного типа конвертирования

После выбора преобразования, в данном случае PEM to FPX, скрипт предложит выбрать директорию с сертификатами на том устройстве, где запускается скрипт.

В нашем случае мы их скачали в директорию /home/ivan/crt/
После корректного ввода директории, скрипт отобразит все файлы в этой директории.
Далее нужно ввести имя сертификата, который будем конвертировать, в нашем случае это site.pem

Обращаю ваше внимание, что для корректной конвертации, с PEM в PFX, необходимо вручную объединить файл сертификата, цепочки и ключа в один файл, иначе будет возникать ошибка конвертации.
Сделать это можно простой командой
Данное действие необходимо только для конвертации из PEM в PFX.
Мы рассмотрели пример конвертации PEM в PFX. Этим же путем можно конвертировать сертификаты в другие форматы. Единственное, что вам уже не понадобится шаг с объединением файлов.
Как просмотреть содержимое ключей и сертификатов SSL
Просмотр содержимого ключей и сертификатов
Мы можем подробно изучить содержимое всех созданных в OpenSSL файлов, а также при необходимости конвертировать их в другие форматы.
В следующих командах используются тестовые файлы со следующими именами:
Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо .key и .crt может использоваться расширение .pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена.
Все эти файлы являются текстовыми:
Там мы увидим примерно следующее:

Если вам эти строки кажутся знакомыми на кодировку Base64, то вы совершенно правы — это она и есть. (Смотрите также «Как быстро узнать и преобразовать кодировку»).
Этот формат, называемый форматом PEM, расшифровывается как Privacy Enhanced Mail.
PEM — это текстовое представление реального двоичного ключа или сертификата в формате DER. Представляет собой двоичного формата DER в кодировке base64 и с дополнительными строками «——BEGIN PRIVATE KEY——», «——BEGIN CERTIFICATE——» и другими в начале файла и строками «——END PRIVATE KEY——», «——END CERTIFICATE——» в конце файла.
Мы можем хранить двоичную версию файла только с кодировкой DER, но наиболее распространенным способом является версия PEM.
Вы можете увидеть структуру приватного следующей командой:
Любой формат ключа на самом деле является контейнером для набора длинных чисел. Все остальные данные можно считать «шумом».
Закрытый ключ содержит: модуль (modulus), частный показатель (privateExponent), открытый показатель (publicExponent), простое число 1 (prime1), простое число 2 (prime2), показатель степени 1 (exponent1), показатель степени 2 (exponent2) и коэффициент (coefficient).
Открытый ключ содержит только модуль (modulus) и открытый показатель (publicExponent).
Вы можете из влечь из файла ключей публичный ключ:
По умолчанию выводится закрытый ключ: с опцией -pubout вместо него будет выведен открытый ключ. Эта опция устанавливается автоматически, если ввод является открытым ключом.
Следующая команда покажет информацию о публичном ключе:
По умолчанию из входного файла считывается закрытый ключ. Используемая в предыдущей команде опция -pubin делает так, что вместо приватного ключа читается открытый ключ.
Можно также добавить опцию -noout — с ней будет выведена та же самая информация, но не будет показана кодированная версия ключа.
С такими же опциями, но уже используя команду req, можно изучить содержимое запроса на подпись сертификата:

При создании SSL сертификата мы создали две пары ключей (корневые и для домена), то есть это файлы rootCA.key и mydomain.com.key, но по своей технической сути они идентичны.
Что касается сертификатов, которых у нас тоже два (rootCA.crt и mydomain.com.crt), то по своей природе они не являются одинаковыми: корневой сертификат является самоподписанным, а сертификат домена подписан приватным корневым ключом.
Информацию о содержимом сертификатов можно посмотреть командой x509 (остальные опции нам уже знакомы):
Самоподписанные сертификаты обычно содержат только самые основные данные сертификатов, как показано в предыдущем примере. Для сравнения, сертификаты, выданные общедоступными центрами сертификации, гораздо интереснее, поскольку они содержат ряд дополнительных полей (с помощью механизма расширений X.509).
Сертификат (цепочку сертификатов) любого сайта вы можете получить следующей командой (замените w-e-b.site на интересующий вас сайт):

Вы увидите сертификаты (один или несколько), найдите по полю CN тот, который вас интересует, например, сертификат домена w-e-b.site:
И скопируйте содержимое начиная с ——BEGIN CERTIFICATE—— и заканчивая ——END CERTIFICATE——. Затем сохраните это в файл.
Вы также можете сохранить сертификат центра сертификации и изучить его:

К примеру, сертификат сайта w-e-b.site я сохранил в файл w-e-b.site.crt, для просмотра информации о нём:


Issuer указывает на организацию, которая выдала (подписала) сертификат:
Validity — срок действия сертификата:
Subject: CN — домен (IP адрес) для которого предназначен сертификат:
Поддомены в группе X509v3 extensions → X509v3 Subject Alternative Name (подробности чуть позже):
Теперь бегло рассмотрим расширения X.509.
Расширение Basic Constraints используется для маркировки сертификатов как принадлежащих ЦС, давая им возможность подписывать другие сертификаты. В сертификатах, отличных от CA, это расширение будет либо пропущено, либо будет установлено значение CA, равное FALSE. Это расширение является критическим, что означает, что все программные сертификаты должны понимать его значение.
Расширения Key Usage (KU) и Extended Key Usage (EKU) ограничивают возможности использования сертификата. Если эти расширения присутствуют, то разрешены только перечисленные варианты использования. Если расширения отсутствуют, ограничений на использование нет. То, что вы видите в этом примере, типично для сертификата веб-сервера, который, например, не позволяет подписывать код:
Расширение CRL Distribution Points перечисляет адреса, по которым можно найти информацию о списке отзыва сертификатов (CRL) ЦС. Эта информация важна в случаях, когда сертификаты необходимо отозвать. CRL — это подписанные CA списки отозванных сертификатов, публикуемые через регулярные промежутки времени (например, семь дней).
Примечание: возможно, вы заметили, что местоположение CRL не использует защищённый сервер, и вам может быть интересно, является ли ссылка небезопасной. Не является. Поскольку каждый CRL подписан центром сертификации, который его выпустил, браузеры могут проверить его целостность. В том же случае, если бы CRL были доступны по TLS (адрес включал бы в себя протокол HTTPS), то браузеры могут столкнуться с проблемой «курицы и яйца», в которой они хотят проверить статус отзыва сертификата, используемого сервером, доставляющим сам CRL!
Расширение Certificate Policies используется для указания политики, в соответствии с которой был выпущен сертификат. Например, именно здесь можно найти индикаторы расширенной проверки (EV). Индикаторы представлены в форме уникальных идентификаторов объектов (OID) и являются уникальными для выдающего ЦС. Кроме того, это расширение часто содержит один или несколько пунктов CPS, которые обычно являются веб-страницами или документами PDF.
Расширение Authority Information Access (AIA) обычно содержит две важные части информации. Во-первых, он перечисляет адрес ответчика CA OCSP, который можно использовать для проверки отзыва сертификатов в режиме реального времени. Расширение также может содержать ссылку, где находится сертификат эмитента (следующий сертификат в цепочке). В наши дни серверные сертификаты редко подписываются непосредственно доверенными корневыми сертификатами, а это означает, что пользователи должны включать в свою конфигурацию один или несколько промежуточных сертификатов. Ошибки легко сделать, и сертификаты будут признаны недействительными. Некоторые клиенты (например, Internet Explorer) будут использовать информацию, представленную в этом расширении для исправления неполной цепочки сертификатов, но многие клиенты этого не сделают.
Расширения Subject Key Identifier и Authority Key Identifier устанавливают уникальные идентификаторы ключа субъекта и ключа авторизации соответственно. Значение, указанное в расширении Authority Key Identifier сертификата, должно соответствовать значению, указанному в расширении Subject Key Identifier в выдающем сертификате. Эта информация очень полезна в процессе построения пути сертификации, когда клиент пытается найти все возможные пути от конечного (серверного) сертификата до доверенного корня. Центры сертификации часто используют один закрытый ключ с несколькими сертификатами, и это поле позволяет программному обеспечению надёжно определять, какой сертификат может быть сопоставлен с каким ключом. В реальном мире многие цепочки сертификатов, предоставляемые серверами, недействительны, но этот факт часто остаётся незамеченным, поскольку браузеры могут находить альтернативные пути доверия.
Наконец, расширение Subject Alternative Name используется для перечисления всех имен хостов, для которых действителен сертификат. Это расширение раньше было необязательным; если его нет, клиенты возвращаются к использованию информации, представленной в Common Name (CN), которое является частью поля «Subject». Если расширение присутствует, то содержимое поля CN игнорируется во время проверки.
Рассмотрим опции команды x509, которые позволяют извлечь разнообразную информацию из сертификатов.
Чтобы показать издателя сертификата используйте опцию -issuer:
Опция -fingerprint вычисляет и выводит дайджест DER-кодированной версии всего сертификата. Это обычно называют «отпечатком». Из-за характера дайджестов сообщений, отпечаток сертификата является уникальным для этого сертификата, и два сертификата с одинаковым отпечатком могут считаться одинаковыми. Для сертификатов обычно не нужно сверять сертификаты по отпечаткам, но это имеет смысл при использовании самоподписанных сертификатов (например, получении сертификата для VNC сессии, когда нет другого способа проверить, что сертификат не был подменён при пересылке). В этом случае можно сверить отпечаток сертификата, например, по телефону или электронной почте.
Для показа отпечатка сертификата:
Чтобы вывести сертификат в виде строки символов в стиле C — char, используйте опцию -C:
Чтобы вывести расширения сертификата в текстовой форме, используйте опцию -ext. Несколько расширений можно перечислить через запятую, например «subjectAltName,subjectKeyIdentifier«. Чтобы посмотреть весь список расширений:
Пример команды для вывода альтернативных имён в домене:
Пример информации об альтернативных именах домена:
Для вывода почтовых адресов, содержащихся в сертификате, используйте опцию -email. Адреса электронной почты могут отсутствовать в сертификате.
Для вывода адресов респондентов OCSP, если они присутствуют в сертификате, укажите опцию -ocsp_uri:
Для показа дат из сертификата имеются следующие опции:
Для вывода имени subject укажите опцию -subject:
Пример вывода имени subject сертификата в форме схемы на терминале, поддерживающем UTF8:
Опция -serial выводит серийный номер:
Чтобы извлечь публичный ключ из сертификата используйте опцию -pubkey:
Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».
HTTPS, SSL сертификаты и форматы сертификатов
P.S.: сам пока на https еще не перешел, подготавливаюсь и собираю информацию.
CSR Запрос SSL сертификата
При покупке SSL сертификата при помощи специальных утилит или сервисов генерируется CSR запрос (Certificate Signing Request) в котором закодированы следующие данные:
При генерации запроса получаем две части: публичную, которую нужно сообщить тому, кто генерирует нам сертификат (центру сертификации) и приватную, которую нужно будет прописать на сервере, где будет находиться ваш сайт с ssl-сертификатом.
Ниже пример публичной части такого CSR запроса, в котором закодированы указанные выше данные:
Раскодировать CSR и посмотреть что в нем зашифровано, например при помощи этих сервисов:
Или утилиты openssl и команды:
После того как центр сертификации убедится в правильности переданных данных (в CSR запросе) Вам будет выдан SSL сертификат. Время проверки зависит от типа сертификата. Сертификаты подтверждающие только доменное имя (самые дешевые сертификаты) выдаются в автоматическом режиме, так как в них не нужно проверять существует ли указанная компания, ее контакты тд. и тп.
Создать CSR с новым сертификатом через утилиту OpenSSL
Типы SSL сертификатов по проверке
Типы SSL сертификатов по свойствам
Центры сертификации
Наиболее популярные центры сертификации:
Сертификаты перечисленных выше центров сертификации считаются доверенными в 99.99% браузеров. Покупать сертификаты значительно дешевле у партнеров центров сертификации, а не напрямую.
Форматы SSL сертификатов
OpenSSL команды для конвертации форматов SSL сертификатов
SEO и SSL
Переход на HTTPS, SSL
Указать канонические url через https.
Изменить все внутренние ссылки с http на https: Это тоже можно сделать через запрос в базе данных
Вариантов кодов редиректа с http на https существует большое количество, для примера приведу два из них:
Не всегда такая переадресация работает, у меня например выбивало ошибку «ERR_TOO_MANY_REDIRECTS», то есть происходило зацикливание.
В этом случае может помочь 301 редирект через php-код:
Полезная информация
Получить сертификат Active Directory можно при помощи ввода команды на контролере домена:
Генерация приватного 2048-битного ключа при помощи openssl:
Пример config-файла утилиты OpenSSL для генерации SAN сертификата:
Команда для генерации CSR запроса через OpenSSL
Не доверенный сертификат сайта для браузера в android
Помимо установки сертификата для сайта, нужно также установить промежуточные и корневой сертификаты, тогда браузеры в android не будут ругаться.
Связано это с тем, что браузеры на компьютерах при проверке сертификата умеют проходить весь «путь сертификации»: от сертификата сайта, до корневого сертификата, проверяя кем подписан сертификат каждого промежуточного узла. В android устройствах браузеры проверяют лишь кто подписал сертификат сайта и если они не увидят корневой сертификат доверенного центра сертификации, то будут считать такой сертификат не доверенным.
При установке ssl сертификата на сайт укажите не только свой сертификат, но и сертификаты всех промежуточных центров сертификации включая с корневым сертификатом центра сертификации.
Например в настройках хостинга «Украина», в поле где указывается SSL-сертификат моего сайта я прописал:
Как проверить соответствие SSL сертификата и CSR к приватному ключу
Нужно преобразовать приватный ключ, SSL сертификата и CSR в md5 хэши:
Вывести md5 хэш модуля SSL сертификата :
Вывести md5 хэш модуля приватного ключа :
Вывести md5 хэш модуля CSR :
Если полученные md5 хэши одинаковы, значит файлы (сертификат, приватный ключ и CSR) соответствую друг другу.
Руководство. Общие сведения о сертификатах X.509 с открытым ключом
Сертификаты X.509 — это цифровые документы, которые представляют пользователя, компьютер, службу или устройство. Они могут выдаваться корневым или подчиненным центром сертификации (ЦС) либо центром регистрации и содержат открытый ключ субъекта сертификата. Они не содержат закрытый ключ субъекта, который должен храниться безопасно. Сертификаты с открытым ключом определяются в документе RFC 5280. Они имеют цифровую подпись и обычно содержат следующую информацию:
Поля сертификата
Со временем появились три версии сертификата. В каждой из версий добавлялись новые поля. Версия 3, которая действует в настоящий момент, содержит все поля версий 1 и 2, дополненные полями версии 3. Версия 1 определяет следующие поля:
В версии 2 добавлены следующие поля с информацией об издателе сертификата, хотя эти поля редко используются:
В сертификатах версии 3 добавлены следующие расширения:
Форматы сертификатов
Сертификаты можно сохранить в нескольких форматах. Для проверки подлинности в Центре Интернета вещей Azure обычно используются форматы PEM и PFX.
Двоичный сертификат
Содержит двоичный сертификат в необработанном формате в кодировке DER ASN.1.
Формат ASCII PEM
Ключ ASCII (PEM)
Содержит ключ DER в кодировке Base64 с добавлением необязательных метаданных со сведениями об алгоритме, используемом для защиты пароля.
Сертификат PKCS#7
Этот формат предназначен для передачи подписанных или зашифрованных данных. Он определяется стандартом RFC 2315. В нем может содержаться полная цепочка сертификатов.
Ключ PKCS#8
Этот формат предназначен для хранения закрытого ключа и определен в стандарте RFC 5208.
Ключ и сертификат PKCS#12
Дополнительные сведения
Дополнительные сведения см. в следующих разделах:
Дальнейшие действия
Если вы хотите создать тестовые сертификаты, которые можно использовать для проверки подлинности устройств в Центре Интернета вещей, изучите следующие разделы:
Если у вас есть сертификат корневого или подчиненного центра сертификации (ЦС), который вы хотите отправить в центр Интернета вещей и подтвердить права владения, см. руководство Подтверждение принадлежности сертификата ЦС.
Шпоры по сертификатам X.509
Чудище обло, озорно, огромно, стозевно и лаяй.
Кстати что общего между LDAP, SNMP и X.509 ну кроме того, что им еще не скоро предстоит собрать стадионы фанатов? Их объединяет ASN.1 — мета-язык описания объектов древности. Если бы эти технологии создавали сейчас, в ход бы пошли XML, DTD или какой-нибудь другой ML. Но в то время стандарты создавались титанами, для которых даже SNMP был простым делом.
Словарный запас
Определение X.509 сертификатов есть в архиве ITU-T
Для того, чтобы досконально понять обозначения и синтаксис, придется читать спеки X.680 редакции 2008 г., где есть полное описание ASN.1. В понятиях ASN.1 SEQUENCE обозначает примерно то же самое, что и struct в Си. Это может сбить с толку, ведь по семантике оно должно было соответствовать скорее массиву. И тем не менее.
Стандарт X.690 определяет следующие правила кодирования структур данных, созданных в соответствии с ASN.1: BER (Basic Encoding Rules), CER (Canonical Encoding Rules), DER (Distinguished Encoding Rules). Есть даже XER (XML Encoding Rules), который на практике мне никогда не встречался.
Да, но для чего нужны сертификаты X.509, которые доставляют столько головной боли? Первая и основная функция сертификатов X.509 — служить хранилищем открытого или публичного ключа PKI (public key infrastructure). К этой функции нареканий нет, а вот со второй не все так однозначно.
Вторая функция сертификатов X.509 заключается в том, чтобы предъявитель сего был принят человеком, либо программой в качестве истинного владельца некоего цифрового актива: доменного имени, веб сайта и пр. Это получается по-разному, далеко не все сертификаты имеют высокую ликвидность, если пользоваться финансовой терминологией. Полгода назад Гугл пригрозил компании Симантек, что перестанет доверять их сертификатам из-за того, что те выпустили аж 30,000 неисправных сертификатов.
Номенклатура сертификатов
Давайте рассмотрим, какие сертификаты X.509 встречаются в природе, если рассматривать их по расположению в пищевой цепочке доверия.
По степени крутизны дороговизны и надежности сертификаты делятся на 3 вида: DV, OV и EV.
Редко, кто на это готов раскошелиться. Навскидку Яндекс, StackOverflow.com и Хабр могут жить и без него. Но те, кто готов пойти ради этого на жертвы должны выполнить следующие требования:
По свои свойствам сертификаты бывают следующих типов.
В России понятие КС квалифицированного сертификата определено законодательно в связи с доступом к ГосУслугам. По ссыске Хабрапост с былиной об извлечении персональных данных из КС.
Откуда берутся сертификаты?
Еще совсем недавно было всего 2 способа заполучить X.509 сертификат, но времена меняются и с недавнего времени есть и третий путь.
Для первого сценария достаточно пары команд и чтобы 2 раза не вставать создадим сертификат с алгоритмом эллиптических кривых. Первым шагом нужно создать закрытый ключ. Считается, что шифрование с алгоритмом эллиптических кривых дает больший выхлоп, если измерять в тактах CPU, либо байтах длины ключа. Поддержка ECC не определена однозначно в TLS Openssl имеет огромное количество опций и команд. Man страница не очень полезна, справочник удобнее использовать так:
Следует серия вопросов, чтобы было чем запомнить поля owner и issuer
Конвертируем связку ключей из проприетарного формата в PKCS12.
Смотрим на результат:
LetsEncrypt
Сценарий №1 — найти следующего в связке
Так и есть, SKI сертификат DigiCert имеет то же значение.
Сценарий №2 — используй subjectAltnName, Люк
Откройте файл openssl.cnf и в секции req добавьте следующие линии.
Далее, в секции [ v3_ca ] укажите.
А дальше все как обычно, создаем закрытый ключ и подписываем сертификат.



