Создание SSL сертификата в Linux.
В продолжение линейки статей про 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