Создание SSL сертификата в Linux.

2 minute read

В продолжение линейки статей про SSL, хотелось бы описать шаги появления сертификатов. Я не буду повторяться в терминологии. Теоретическая часть изложена в статье Что такое SSL и с чем его кушать Дальнейшие действия справедливы в среде Linux c использованием функционала пакета Openssl. Итак для начала генерируем ключ безопасности. Очень важно скопировать этот файл в укромное место, поскольку без него не будет работать сертификат.

openssl genrsa -out server.key 2048

Дальше генерируем файл на запрос сертификата:

openssl req -new -key server.key -out %your_website%.csr

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

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
A challenge password []:
An optional company name []:

К сожалению Common Name принимает только одно значение, то есть Вы можете сгенерировать сертификат только для домена с www или только для домена без www. Как быть? Очень просто. Для начала нужно быть готовым к тому, что сертификат на 2 домена будет стоить дороже, чем на 1. То есть если на вашем сайте используются ссылки с www и без www, тогда придется раскошеливаться, либо переписывать код.

Вторым примером может стать экономия денег. То есть один сертификат на 3 домена, как правило, стоит дешевле, чем 3 отдельных сертификата. Как Вы догадались дальше речь пойдет о генерации сертификатов для нескольких доменов или о мультидоменных сертификатах. Для того что бы сгенерировать запрос сертификата для нескольких доменов нужно отредактировать файл /etc/ssl/openssl.cnf: Раскомментировать строку:

req_extensions = v3_req

Дальше нужно найти секцию [ v3_req ]. Она будет содержать вот такие строки:

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

Сразу под ними нужно прописать следующую конструкцию

subjectAltName = @alt_names
[alt_names]
DNS.1 = www.%your_website%.com
DNS.2 = www.%your_website%.org
DNS.3 = %your_website%.org

Массив alt_names будет содержать альтернативные имена доменов, которые будут включены в сертификат. Не нужное можно убрать, нужное - добавить. После этой операции нужно вернуться на 3 шага назад, сгенерировать server.key и CSR. К сожалению подобной функции нету в IIS, поэтому мультидоменные сертификаты генерируются исключительно в среде Linux. На выходе Вы получите CSR файл (запрос сертификата), который будет содержать все нужные Вам домены. Прочитать содержимое CSR файла можно следующей командой:

openssl req -in %your_website%.csr -noout -text

Удостоверившись в том, что наш запрос содержит все нужные Вам данные можно смело отправляться на поиски центров сертификации (для тех, кто не читал статью по ссылке в начале, это такие организации которые сделают ваш сертификат валидным с помощью своей цифровой подписи за Ваши деньги) Рекомендую еще раз удостовериться, что файл server.key надежно сохранен в нескольких местах. Без него сертификат работать не будет. В случае потери файла server.key придется повторять все шаги и покупать новый сертификат.

После заполнение нужных формочек и оплаты вам предоставят несколько способов верификации Вашего сайта. Как правило это либо создание текстового файла в корне сайта, либо добавление txt записи в DNS зону. Первый вариант более удобен, поскольку занимает меньше всего времени. Вся процедура не должна занять больше часа. На выходе Вы получаете текстовую абракадабру - сертификат. Теперь Вам осталось добавить его на сервер.

И в конце концов, создать самоподписаный сертификат можно вот так:

openssl x509 -req -extensions v3_req -days 365 -in %your_website%.csr -signkey server.key -out %your_website%.crt