Настройка центра сертификации OpenSSL
Last updated
Last updated
Технология Secure Socket Layer (SSL), изначально разработанная Netscape в 1994 году для поддержки возможностей электронной коммерции в Интернете, прошла долгий путь. Теперь SSL-сертификаты стали обычной необходимостью для любого веб-сайта. OpenSSL - криптографическая библиотека с открытым исходным кодом и инструментарий SSL. Приложения, содержащиеся в библиотеке, помогают создать безопасную среду связи для компьютерных сетей.
В этом руководстве разберемся как с теорией, так и узнаем как работать с сертификатами на практике при помощи утилиты OpenSSL.
Сертификат Secure Socket Layer (SSL) - это протокол безопасности, который защищает данные между двумя компьютерами с использованием шифрования.
Проще говоря, сертификат SSL - это файл данных, который в цифровом виде связывает криптографический ключ с сервером или доменом, а также с названием и местонахождением организации.
Как правило, сертификаты SSL используются на веб-страницах, которые передают и получают конфиденциальные данные конечного пользователя, такие как номер социального страхования, данные кредитной карты, домашний адрес или пароль. Онлайн формы оплаты являются хорошим примером и обычно шифруют вышеупомянутую деликатную информацию с использованием 128 или 256-битной технологии SSL.
Сертификаты SSL обеспечивают идентификацию удаленного компьютера, чаще всего сервера, но также подтверждают идентификацию вашего компьютера с удаленным компьютером для установления безопасного соединения. Обеспечение безопасности в Интернете всегда было улицей с двусторонним движением, и благодаря SSL-шифрованию сервер «пожимает руку» вашему персональному компьютеру, и обе стороны знают, с кем они общаются.
Её нет! Transport Layer Security (TLS) - это обновленная версия Secure Socket Layer (SSL). Даже при том, что большинство безопасных соединений через протоколы TLS, люди продолжают называть это SSL.
Вы, вероятно, заметили, что в вашем браузере в адресной строке загорелся зеленый значок замка, а протокол соединения - это https. Ваш браузер сообщает вам, что веб-сайт защищен с использованием шифрования SSL. Если щелкнуть информационную панель сайта, появится дополнительная информация о подключении, а также информация о самом сертификате SSL.
Давайте возьмем реальный пример. Допустим являетесь владельцем сайта интернет-магазина, м вы хотите, чтобы ваши посетители чувствовали себя в безопасности при посещении вашего интернет-магазина и, прежде всего, не стеснялись войти в систему и совершить покупку. Сертификат SSL и соединение HTTPS внушают доверие потребителей. Индустрия электронной коммерции тесно связана с доверием потребителей, и мы можем даже сказать, что ваш бизнес зависит от того, насколько ваши клиенты чувствуют себя в безопасности в течение всего процесса покупки.
Помимо очевидных причин безопасности, SSL-сертификат увеличивает SEO вашего сайта и рейтинг в Google, а также повышает доверие клиентов и, следовательно, повышает общий коэффициент конверсии. Если этого недостаточно, чтобы заставить вас задуматься о получении сертификата SSL для вашего домена, Google обязательно убедит вас. А именно, с июля 2018 года Google помечает каждый сайт без SSL как небезопасный.
Сертификаты SSL проверяются и выдаются Центром сертификации (CA - Certificate Authorities). Вы подаете заявку, генерируя CSR (Certificate Signing Request - запрос на получение сертификата) с парой ключей на вашем сервере, которая в идеале будет содержать сертификат SSL. CSR содержит важные организационные детали, которые CA проверяет.
Сгенерируйте CSR и пару ключей локально на вашем сервере. Пара ключей состоит из открытого (public key) и закрытого (private key) ключей.
Отправьте CSR и открытый ключ в центр сертификации, который проверит вашу личность, а также владеете ли вы доменом, указанным в заявке. Центр сертификации проверяет вашу организацию и проверяет, зарегистрирована ли организация в расположении, указанном в CSR, и существует ли домен.
После проверки организация получает копию своего сертификата SSL, включающего бизнес данные, а также открытый ключ. Теперь организация может установить сертификат на своем сервере.
Когда центр сертификации выдает сертификат, он связывается с сертификатом «доверенного корня» (trusted root) центра сертификации. Корневые сертификаты встроены в каждый браузер и связаны с индивидуально выданными сертификатами для установления HTTPS-соединения.
Нередко популярные браузеры не доверяют всем сертификатам, выпущенным одним центром сертификации. Например, Google Chrome не доверяет корневым сертификатам Symantec, поскольку Symantec несколько раз нарушала отраслевые политики. Это означает, что все сертификаты, укоренившиеся в Symantec, стали недействительными независимо от даты их действия.
Убедитесь, что вы выбрали центр сертификации, который поддерживает необходимый вам тип сертификата. Для вашего удобства ниже приведено описание каждого типа сертификата:
Однодоменный SSL-сертификат (Single Domain SSL Certificate) - Этот тип предназначен для использования в одном домене и не поддерживает субдомены. Например, если сертификат будет использоваться для wiki.merionet.ru, он не будет поддерживать любое другое доменное имя.
Несколько доменов (сертификаты SAN / UC) - Несколько сертификатов домена используются для многочисленных доменов и поддоменов. Помимо полного доменного имени, вы можете добавить поддержку других поддоменов, добавив их в поле «Альтернативное имя субъекта». Например, сертификат SAN может включать домен wiki.merionet.ru, его поддомен asterisk.merionet.ru, а также другой домен (например, shop.merionet.ru).
Wildcard сертификат - Сертификаты могут использоваться для домена, включая все его поддомены. Основное отличие состоит в том, что вместо выдачи для определенного полного доменного имени сертификаты с подстановочными знаками используются для широкого диапазона поддоменов. Например, сертификат подстановочного знака, выданный *.merionet.ru, может использоваться для широкого диапазона поддоменов в основном домене
Центры сертификации имеют различные уровни проверки сертификатов в ответ на растущий спрос на сертификаты. Некоторые организации используют SSL только для шифрования, в то время как другие хотят показать своим клиентам, что они являются доверенной компанией. Различные потребности привели к различным уровням проверки сертификата.
Этот тип сертификата SSL идеально подходит для защиты блогов, приложений социальных сетей и личных веб-сайтов. Центр сертификации не гарантирует идентичность организации, и проверяется только владение доменом.
Центр сертификации проверяет право собственности на домен и проводит тщательное расследование организации, связанной с сертификатом EV. При рассмотрении расширенного запроса проверки соблюдаются строгие правила, и центр сертификации должен проверить следующее:
Информация об организации соответствует официальным данным
Физическое, юридическое и эксплуатационное существование субъекта
Организация имеет исключительные права на использование домена, указанного в сертификате SSL
Организация надлежащим образом санкционировала выдачу сертификата EV SSL
То, как сгенерировать запрос на подпись сертификата (CSR), зависит исключительно от платформы, которую вы используете, и конкретного выбранного вами инструмента.
Мы будем генерировать CSR с использованием OpenSSL.
OpenSSL - это широко используемый инструмент для работы с CSR-файлами и SSL-сертификатами, который можно загрузить с официального сайта OpenSSL. Это инструмент реализации с открытым исходным кодом для SSL/TLS, который используется примерно на 65% всех активных интернет-серверов, что делает его неофициальным отраслевым стандартом.
Сначала проверим, установлена ли у нас утилита OpenSSL при помощи команды:
Если пакет OpenSSL установлен, мы получим следующий результат:
Если вы не видите такого результата, выполните следующую команду для установки OpenSSL:
Red Hat (версия 7.0 и более поздние) должна поставляться с предустановленной ограниченной версией OpenSSL. Он предлагает только ограниченную поддержку для IDEA, RC5 и MDC2, поэтому вы можете установить недостающие функции.
Чтобы проверить, установлен ли OpenSSL на сервере yum (например, Red Hat или CentOS), выполните следующую команду:
Эта команда должна вернуть следующий результат:
Если ваш формат вывода отличается, это означает, что OpenSSL не установлен на вашем сервере. Выполните следующую команду для установки OpenSSL:
Запрос на подпись сертификата (CSR - Certificate Signing Request) содержит наиболее важную информацию о вашей организации и домене. Это зашифрованный блок текста, который включает информацию о вашей организации, такую как страна, адрес электронной почты, полное доменное имя и так далее Он отправляется в центр сертификации при подаче заявки на сертификат SSL.
Обычно вы генерируете пару CSR и ключ локально на сервере, где будет установлен сертификат SSL. Однако это не строгое правило. Вы можете сгенерировать пару CSR и ключ на одном сервере и установить сертификат на другом. Однако это усложняет ситуацию. Мы рассмотрим и этот сценарий.
SSL использует две длинные строки случайно сгенерированных чисел, которые известны как закрытые и открытые ключи. Открытый ключ доступен для публичного домена, так как он является частью вашего SSL-сертификата и сообщается вашему серверу.
Закрытый ключ должен соответствовать CSR, с которым он был создан, и, в конечном счете, он должен соответствовать сертификату, созданному из CSR. Если закрытый ключ отсутствует, это может означать, что сертификат SSL не установлен на том же сервере, который сгенерировал запрос на подпись сертификата.
CSR обычно содержит следующую информацию:
Параметр | Описание | Пример |
Common Name или FQDN | FQDN (fully qualified domain name) - это полное доменное имя вашего сайта. Он должен совпадать с тем, что пользователи вводят в веб-браузере | wiki.merionet.ru |
Organization Name (e.g., company) | Полное юридическое название вашей организации, включая суффиксы, такие как LLC, Corp и так далее | Merion Networks LTD |
Organizational Unit Name | Отдел в вашей организации, который занимается этим сертификатом | Technology Division |
Locality Name | Город, в котором находится ваша организация | Moscow |
State/Region/Province (full name) | Штат или регион, в котором находится ваша организация | Moscow |
Country Code (2 letter code) | Страна, в которой находится ваша организация. Всегда вводится в виде двухбуквенного кода ISO | RU |
Email Address | Адрес электронной почты, используемый для связи с веб-мастером сайта | info@merionet.ru |
Public Key | втоматически созданный ключ, который создается с помощью CSR и входит в сертификат. | Закодированный текстовый блок похож на закрытый ключ. Смотрите пример закрытого ключа ниже. |
Обратите внимание, что существуют определенные соглашения об именах, которые необходимо учитывать. Название организации и название организационной единицы не должны содержать следующие символы: < > ~! @ # $% ^ * / ()?., &
Запросы на подпись сертификата (CSR) создаются с помощью пары ключей - открытого и закрытого ключа. Только открытый ключ отправляется в центр сертификации и включается в сертификат SSL, и он работает вместе с вашим личным ключом для шифрования соединения. Любой может иметь доступ к вашему открытому ключу, и он проверяет подлинность SSL-сертификата.
Закрытый ключ - это блок закодированного текста, который вместе с сертификатом проверяет безопасное соединение между двумя компьютерами. Он не должен быть общедоступным, и его не следует отправлять в ЦС.
Целостность сертификата зависит от того, что только вы знаете закрытый ключ. Если вы когда-либо скомпрометированы или утеряны, как можно скорее введите новый сертификат с новым закрытым ключом. Большинство ЦС не взимают плату за эту услугу.
Большинство пар ключей состоят из 2048 битов. Хотя пары ключей длиной 4096 бит более безопасны, они замедляют SSL-рукопожатия и создают нагрузку на серверные процессоры. Из-за этого большинство сайтов по-прежнему используют 2048-битные пары ключей.
Первое, что нужно сделать, - это создать 2048-битную пару ключей RSA локально. Эта пара будет содержать как ваш закрытый, так и открытый ключ. Вы можете использовать инструмент Java key или другой инструмент, но мы будем работать с OpenSSL.
Чтобы создать открытый и закрытый ключ с запросом на подпись сертификата (CSR), выполните следующую команду OpenSSL:
Что эта команда означает:
openssl
- активирует программное обеспечение OpenSSL
req
- указывает, что мы хотим CSR
–out
- указывает имя файла, в котором будет сохранен ваш CSR. У нас в примере это certificatesigningrequest.csr
–new –newkey
- создать новый ключ
rsa:2048
- cгенерировать 2048-битный математический ключ RSA
–nodes
- нет DES, то есть не шифровать закрытый ключ в PKCS#12 файл
–keyout
- указывает домен, для которого вы генерируете ключ
Далее ваша система должна запустить текстовую анкету для заполнения, которую мы описывали в таблице выше:
После завершения работы программы вы сможете найти файл CSR в вашем рабочем каталоге. Запрос на подпись сертификата, сгенерированный с помощью OpenSSL, всегда будет иметь формат файла .csr
. Чтобы найти в папке все файлы этого формата используйте команду
Тут будет список всех сертификатов, останется только найти тот, что мы только что сгенерировали.
Также вы можете открыть файл .csr
в текстовом редакторе, например nano, чтобы просмотреть сгенерированный буквенно-цифровой код.
После того, как вы сгенерировали CSR с парой ключей, сложно увидеть, какую информацию она содержит, поскольку она не будет в удобочитаемом формате. Вы можете легко декодировать CSR на своем сервере, используя следующую команду OpenSSL:
Далее можно декодировать CSR и убедиться, что он содержит правильную информацию о вашей организации, прежде чем он будет отправлен в центр сертификации.
В Интернете существует множество CSR-декодеров, которые могут помочь вам сделать то же самое, просто скопировав содержимое файла CSR, например sslshopper.
Рекомендуется выдавать новый закрытый ключ всякий раз, когда вы генерируете CSR. Если по какой-либо причине вам необходимо сгенерировать запрос на подпись сертификата для существующего закрытого ключа, используйте следующую команду OpenSSL:
Один маловероятный сценарий, в котором это может пригодиться, - это если вам нужно обновить существующий сертификат, но ни у вас, ни у вашего центра сертификации нет первоначального CSR. Это позволит извлечь информацию о вашем домене и организации из сертификата SSL и использовать его для создания нового CSR, что позволит вам сэкономить время. Параметр -x509toreq
преобразует сертификат в запрос сертификата.
Самозаверяющий сертификат обычно используется для сред тестирования и разработки, а также в интрасети. Давайте создадим самозаверяющий сертификат, используя следующую команду OpenSSL:
Параметр –days
установлен на 365
, что означает, что сертификат действителен в течение следующих 365 дней. Параметр x509
указывает, что это будет самозаверяющий сертификат. Временный CSR генерируется, и он используется только для сбора необходимой информации. Если вы не хотите защищать свой закрытый ключ паролем, вы можете добавить параметр –nodes
.
Центры сертификации не проверяют самоподписанные сертификаты. Таким образом, они не так безопасны, как проверенные сертификаты. Если ЦС не подписал сертификат, каждый основной браузер отобразит сообщение об ошибке «Ненадежный сертификат», как показано на рисунке ниже.
Если у вас уже есть CSR и закрытый ключ и вам нужно создать самозаверяющий сертификат, используйте следующую команду:
Параметр –days
установлен на 365
, что означает, что сертификат действителен в течение следующих 365 дней.
Откройте каталог, в котором находится ваш CSR-файл. Введите следующую команду:
Замените domain
параметром FQDN вашего CSR. Эта команда отобразит содержимое файла CSR. Скопируйте весь контент, начиная с BEGIN CERTIFICATE REQUEST
и заканчивая END CERTIFICATE REQUEST
.
То, что некоторые веб-серверы позволяют использовать старые CSR для обновления сертификатов, не означает, что вы должны их использовать. В качестве меры безопасности всегда генерируйте новый CSR и закрытый ключ при обновлении сертификата. Привязка к одному и тому же секретному ключу - это дорога, вымощенная уязвимостями безопасности.
Также рекомендуется обновить SSL-сертификат до истечения срока его действия. В противном случае потребуется покупать новый сертификат.
Как мы уже упоминали, было бы разумно проверить информацию, представленную в CSR, прежде чем подавать заявку на сертификат. Используйте следующие команды для проверки вашего запроса на подпись сертификата, SSL-сертификата и ключа:
Эта команда проверит CSR и отобразит данные, указанные в запросе:
Следующая команда проверит ключ и его действительность:
Когда вам нужно проверить сертификат, дату его истечения и кто его подписал, используйте следующую команду OpenSSL:
Закрытый ключ кодируется и создается в формате PEM
на основе Base-64, который не читается человеком. Вы можете открыть его в любом текстовом редакторе, но все, что вы увидите, это несколько десятков строк, которые кажутся случайными символами, заключенными в открывающие и закрывающие заголовки. Ниже приведен пример закрытого ключа:
В большинстве случаев вам не нужно импортировать код закрытого ключа в файловую систему сервера, так как он будет создан в фоновом режиме, пока вы создаете CSR, а затем автоматически сохраняется на сервере. Во время установки SSL-сертификата система извлекает ключ.
Для проверки вам нужно вывести контрольные суммы md5 и сравнить их. Выполните следующую команду:
Некоторые системы не автоматизируют процедуру извлечения закрытого ключа. Кроме того, если вам нужно установить существующий сертификат на другом сервере, вы, очевидно, не можете ожидать, что он получит закрытый ключ. Основная сложность здесь заключается в том, как найти точное местоположение ключа. Способ получения ключа зависит от используемой ОС сервера и от того, использовался ли интерфейс командной строки или панель управления веб-хостинга определенного типа для генерации CSR.
Если дело в том, что ваш сертификат уже установлен, выполните следующие действия, которые помогут вам найти свой закрытый ключ в популярных операционных системах.
Вы сможете найти местоположение личного ключа вашего сервера в файле виртуального хоста вашего домена.
Перейдите к местоположению корневого сервера сайта (обычно это каталог /var/www/
) и откройте основной файл конфигурации сайта. Найдите директиву ssl_certificate_key
, которая предоставит путь к файлу закрытого ключа.
Если вы не можете найти директиву ssl_certificate_key
, возможно, существует отдельный файл конфигурации для деталей SSL. Ищите что-нибудь вроде ssl.conf
.
При использовании библиотеки OpenSSL в Apache закрытый ключ по умолчанию сохраняется в /usr/local/ssl
. Запустите openssl version –a
, команду OpenSSL, которая определяет, какую версию OpenSSL вы используете.
Выходные данные будут отображать каталог, который содержит закрытый ключ. Смотрите пример выходных данных ниже:
Последняя строка OPENSSLDIR
определяет путь к файлу. В приведенном примере это местоположение по умолчанию /usr/lib/ssl
.
Если вы не создавали CSR с OpenSSL, вам нужно найти и получить доступ к вашему основному файлу конфигурации Apache, который является apache2.conf
или httpd.conf
. Директива SSLCertficateKeyFile
будет указывать путь к файлу закрытого ключа.
Если вы работаете с серверами Apache, запросы на подпись сертификатов (CSR) и ключи хранятся в формате PEM
. Но что, если вы хотите перенести CSR на сервер Tomcat
или Windows IIS
? Вам придется конвертировать стандартный файл PEM
в файл PFX
. Следующие команды помогут вам сделать это.
Примечание: Используйте параметр -nodes
, если вы не хотите шифровать файл .key
. Если вы не используете этот параметр, вам нужно будет указать пароль.
Файлы FKCS12 используются для экспорта или импорта сертификатов в Windows IIS.
Эта команда возьмет закрытый ключ и CSR и преобразует его в один файл .pfx
. Вы можете настроить экспортную фразу-пароль, но также можете оставить это поле пустым. Обратите внимание, что, объединив строки символов сертификата в конец одного файла PEM
, вы можете экспортировать цепочку сертификатов в формат файла .pfx
.
Если файл .pfx
содержит цепочку сертификатов, файл .crt
PEM также будет содержать несколько элементов.
DER
- это двоичный формат, обычно используемый с Java. Чтобы преобразовать файл ASCII PEM
в DER
, используйте следующую команду OpenSSL:
Если вам нужно преобразовать файл .der
в PEM
, используйте следующую команду OpenSSL:
Следующая команда OpenSSL возьмет незашифрованный закрытый ключ и зашифрует его с помощью определенной вами парольной фразы.
Определите ключевую фразу для шифрования закрытого ключа.
Следующая команда OpenSSL возьмет зашифрованный закрытый ключ и расшифрует его.
При появлении запроса введите кодовую фразу для расшифровки закрытого ключа.
Эта команда отображает версию OpenSSL, и ее параметры, с которыми она была скомпилирована:
Получим примерно такой вывод:
Теперь вы знаете, как сгенерировать запрос на подпись сертификата с помощью OpenSSL, а также устранить наиболее распространенные ошибки.