Установка и настройка SSL сертификата под pound, nginx, apache и IIS

SSL_CertificatesНесколько дней тому назад нужно было продлить сертификат для одного домена, как раз вспомнил как это делается. В связи с этим решил написать короткую заметку о проделанной работе, а именно установке godaddy SSL сертификатов на pound, apache и nginx под операционной системой Ubuntu 12.04.

1. Генерация CSR

Если ваш домен хоститься на godaddy серверах, то заморочек с продлением и покупкой сертификатов не будет. В моем случаи домен хоститься на серверах нашей фирмы, в связи с чем нужно генерировать csr(certificate signing request).
Certificate signing request – это файлик, который являет собой запрос на получение сертификата и содержит в закодированном виде нужную для центров сертификации информацию и открытый (публичный) ключ. Для генерации csr нужен закрытый(приватный) ключ, который генерируется на стороне сервера, где будет устанавливаться сертификат конкретного домена. Длина ключа должна быть не менее 2048 bit.
Приступаем к генерации приватного ключа. Для этого будем использовать, обновленный после фикса Heartbleed уязвимости, openssl.

root# openssl genrsa -des3 -out somedomain.com.key 2048
Generating RSA private key, 2048 bit long modulus
..........+++
..............................................................+++
e is 65537 (0x10001)
Enter pass phrase for somedomain.com.key:
Verifying - Enter pass phrase for somedomain.com.key:

На этом этапе нужно будет ввести пароль на приватный ключ. Хочу заметить, что после получение нужных сертификатов от godaddy, нужно будет убрать пароль с ключа, так как при каждой перезагрузке веб-сервера он будет запрашиваться и мне влом каждый раз его вводить (но вы можете оставить).

После генерации ключа можно перейти к генерации csr запроса. При генерации csr необходимо заполнить латинскими символами следующие поля:

Приступаем.

root#  openssl req -new -key somedomain.com.key -out somedomain.com.csr -sha512
Enter pass phrase for somedomain.com.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IL
State or Province Name (full name) [Some-State]:Israel
Locality Name (eg, city) []:Rehovot
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Some company Ltd
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:*.somedomain.com
Email Address []:support@somedomain.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

На два последних запроса просто жмем Enter. Хочу заметить, что challenge password совсем не связан с запросом пароля, который вылазит при рестарте веб-сервера(nginx,pound,apache,etc.), этот атрибут большинство центров сертификации игнорят, godaddy – не исключение. Детали можно почитать в rfc2985.

2. Установка сертификатов

Теперь у нас есть тело запроса, которое нужно закинуть в форму на сайте godaddy. Просто делаем cat somedomain.com.csr, копируем и вставляем на сайте. Далее ждем, когда CA все проверит и утвердит(подпишет) сертификат. Если все прошло успешно – будет доступен для загрузки архив с двумя сертификатами:

Промежуточный сертификат нужен, чтобы связать наш подписанный сертификат с центром сертификации, включенным в список доверенных в браузере или устройстве. К примеру возьмем goggle.com и посмотрим на информацию об их сертификате:

ssl-google

Здесь Google Internet Authority G2 – это промежуточный сертификат между GeoTrust Global CA и доменом *.google.com.ua.

Далее скачиваем архив и распакуем его на сервере где создавали приватный ключ.

root# unzip a8xq4l3hygnj3xd4rz0svlbzmorv1m.zip
f5259a75c35b14bf.crt
gd_bundle-g2-g1.crt
root# ls -1
a8xq4l3hygnj3xd4rz0svlbzmorv1m.zip
f5259a75c35b14bf.crt
gd_bundle-g2-g1.crt
somedomain.com.key
somedomain.com.csr

Как видим у нас есть:
1. f5259a75c35b14bf.crt – наш подписанный сертификат;
2. gd_bundle-g2-g1.crt – промежуточный сертификат;
3. somedomain.com.key – наш приватный ключ, которым мы подписали наш сертификат;
4. somedomain.com.csr – наш запрос на генерацию сертификата.

Из всех файлов нас интересуют crt-файлы и key.

2.1 Убираем пароль из SSL ключа

root# mv somedomain.com.key somedomain.com.key.orig
root# openssl rsa -in somedomain.com.key.orig -out somedomain.com.key

На всякий пожарный мы сделали резервную копию оригинального ключа. Теперь можно приступить к генерации ключей и настройки pound, apache и nginx.

2.1.1 Установка SSL-сертификата для pound

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

root# cat somedomain.com.key f5259a75c35b14bf.crt gd_bundle-g2-g1.crt > somedomain.com.pem

Теперь в настройках pound прописать путь к ключу и сделать рестарт

root# vim /etc/pound/pound.cfg
…
Cert    "/path/to/your/ssl/somedomain.com.pem"
…
root# /etc/init.d/pound restart

Посмотреть информацию об новом сертификате можно из консоли используя curl, секция Server certificate. К примеру:

root# curl -v https://google.com.ua 2>&1 | grep -A6 'Server certificate'
* Server certificate:
*        subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.google.com.ua
*        start date: 2014-12-10 12:01:05 GMT
*        expire date: 2015-03-10 00:00:00 GMT
*        subjectAltName: google.com.ua matched
*        issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*        SSL certificate verify ok.

2.1.2 Установка SSL-сертификата для nginx

Для nginx нам нужно сгенерировать crt файлик, который состоит из промежуточного сертификата и нашего подписанного сертификата (из двух файлов, которые били в скаченном архиве).

root# cat f5259a75c35b14bf.crt gd_bundle-g2-g1.crt > somedomain.com.crt

Потом, в конфигурациях виртуального хоста nginx нужно прописать путь к этому файлу и приватному ключу и сделать рестарт nginx.

root# vim /etc/nginx/sites-enabled/somedomain.com
…
ssl on;
ssl_certificate                /path/to/your/ssl/somedomain.com.crt;
ssl_certificate_key        /path/to/your/ssl/somedomain.com.key;
…
root# /etc/init.d/nginx restart

2.1.3 Установка SSL-сертификата для apache

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

root# vim /etc/apache2/sites-enabled/somedomain.com
…
SSLEngine On
SSLCertificateFile              /path/to/your/ssl/f5259a75c35b14bf.crt
SSLCertificateKeyFile        /path/to/your/ssl/somedomain.com.key
SSLCertificateChainFile    /path/to/your/ssl/gd_bundle-g2-g1.crt
…
root# /etc/init.d/apache2 restart

2.1.4 Установка SSL-сертификата для IIS

В нашем случаи будет установлен SSL сертификат для IIS 10 – это у нас Microsoft Windows server 2016. IIS немного отличается от всего, когда генерируется csr – автоматически создается секретный ключ. В нашем случаи csr был сгенерирован не на IIS сервере (в принципе, как и наш секретный ключ), а используя инструментом openssl. И чтобы добавить сгенерированный вне IIS-a сертификат, мы можем создать pfx файлик, который держит в себе и сертификат и ключ. Чтобы его сгенерировать нужна всего одна команда.

root# openssl pkcs12 -inkey somedomain.com.key -in f5259a75c35b14bf.crt -export -out somedomain.com.pfx

На этом шаге можно ввести пароль на pfx файл или просто нажать два раза Enter.
Чтобы добавить данный сертификат в IIS 10 нужно просто его экспортировать. Для этого идем в Internet Information Services (IIS) Manager. Выбираем наш сервер. Находим Sever Certificates фичу и дважды на нее кликаем.

ssl_iis01

Справа сверху видим Действие Import… и кликаем на него. После чего, в новом открывшимся окне вставляем путь к нашему pfx файлику (вводим пароль, если он был назначен), выбираем сторедж сертификатов, ставим галочку Allow this certificate to be exported и жмем ОК.

ssl_iis02

Осталось только связать сайт с сертификатом. Переходим на Sites, выбираем нужные сайт. Справа сверху в секции Edit Site нажимаем на Bindings… В появившимся окне жмем на кнопку Add… В следующем окне выбираем тип биндинга – https. Прописываем имя хоста и выбираем SSL certificate из списка и жмем ОК.

ssl_iis03

3. Дополнительная информация

3.1 Дешифровка csr-файлов

Если продлеваете сертификат и забыли, какие данные вводили при генерации csr, можно использовать openssl для просмотра информации о старом сертификате.

root# openssl req -in oldsomedomain.com.csr -noout -text
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=IL, ST=Israel, L=Rehovot, O=Some company Ltd, OU=IT, CN=*.somedomain.com/emailAddress=support@somedomain.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                …

3.2 Генерация CSR

Когда имеется много разных доменов и нужно часто создавать SSL ключи – интерактивный режим становиться выносом мозга и потерянным временем. Openssl позволяет генерировать csr запрос не только в интерактивном режиме. Наведу пару дополнительных способов генерации csr-файла.

3.2.1 Интерактивная (активная) генерация

3.2.1.1 С созданием ключа

Генерация csr-файла и ключа в интерактивном режиме одной командой без запроса на ввод пароля(с созданием ключа на лету). Если убрать опцию “-nodes”, то нужно будет задать пароль на ключ.

root# openssl req -nodes -newkey rsa:2048 -keyout site.com.key -out site.com.csr

3.2.1.2 С предварительно созданным ключом

Генерация csr-файла на основе предварительно созданного ключа в интерактивном режиме. Если ключ создавался с паролем, то его нужно будет ввести.

root# openssl req -new -key site.com.key -out site.com.csr

3.2.2 Не интерактивная (пассивная) генерация

3.2.2.1 С созданием ключа

Генерация csr-файла и ключа в не интерактивном режиме одной командой без запроса на ввод пароля(с созданием ключа на лету). Если убрать опцию “-nodes”, то нужно будет задать пароль на ключ.

root# openssl req -nodes -newkey rsa:2048 -keyout site.com.key -out site.com.csr -subj '/C=IL/ST=Israel/L=Rehovot/O=Some Company Ttd/OU=IT/CN=*.site.com/emailAddress=support@site.com'

3.2.2.2 С предварительно созданным ключом

Генерация csr-файла на основе предварительно созданного ключа в не интерактивном режиме. Если ключ создавался с паролем, то его нужно будет ввести.

root# openssl req -new -key site.com.key -out site.com.csr -subj '/C=IL/ST=Israel/L=Rehovot/O=Some Company Ttd/OU=IT/CN=*.site.com/emailAddress=support@site.com'

3.3 Генерация самоподписного сертификата

Когда нужно тестировать SSL для какого-то локального сайта, можно использовать самоподписний сертификат, который позволит вам полноценно тестировать SSL, но будут вылазить сообщения, что сайт является не доверенным (сертификат липовый).

3.3.1 Интерактивная (активная) генерация

3.3.1.1 С созданием ключа

Генерация самоподписного сертификата с приватным ключом в интерактивном режиме, т.е. нужно будет вводит всю csr информацию без запроса на ввод пароля (с созданием ключа на лету). Если убрать опцию “-nodes”, то нужно будет задать пароль на ключ

root# openssl req -new -newkey rsa:2048 -keyout site.com.key -nodes -x509 -days 365 -out site.com.crt

3.3.1.2 С предварительно созданным ключом

Генерация самоподписного сертификата на основе предварительно созданного ключа в интерактивном режиме. Если ключ создавался с паролем, то его нужно будет ввести.

root# openssl req -new -key site.com.key -days 365 -x509 -out site.com.crt

3.3.2 Не интерактивная (пассивная) генерация

3.3.2.1 С созданием ключа

Генерация самоподписного сертификата с приватным ключом в не интерактивном режиме без всяких вопросов и запроса на ввод пароля (с созданием ключа на лету). Если убрать опцию “-nodes”, то нужно будет задать пароль на ключ.

root# openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj "/C=IL/ST=Israel/L=Rehovot/O=Some Company Ttd/OU=IT/CN=*.site.com/emailAddress=support@site.com " -keyout site.com.key -out site.com.crt
 

3.3.2.2 С предварительно созданным ключом

Генерация самоподписного сертификата на основе предварительно созданного ключа в не интерактивном режиме. Если ключ создавался с паролем, то его нужно будет ввести.

root# openssl req -new -key site.com.key -days 365 -x509 -subj "/C=IL/ST=Israel/L=Rehovot/O=Some Company Ttd/OU=IT/CN=*.site.com/emailAddress=support@site.com " -out site.com.crt

Вот и все.

Автор: admin, 13 января 2015
Рубрики: Безопасность
Метки:
2 комментария к сообщению: “Установка и настройка SSL сертификата под pound, nginx, apache и IIS”
  1. Пример генерации запроса на сертификат для мультидоменного сертификата:

    openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout my.domain.key -out my.domain.req -subj ‘/C=US/ST=Florida/L=Miami/O=My Company/OU=It Dept/CN=my.domain/emailAddress=hostmaster@my.domain/subjectAltName=DNS.1=www.my.domain,DNS.2=anothersubdom.my.domain’

  2. Иван:

    Спасибо.
    Было бы неплохо описание создания самоподписной цепочки CA->Immediate->Signed.
    На тестовых виртуалках добавляем CA в хранилища доверенных сертификатов и тестируем все, что душе угодно. HTTPS и подписание JARников например.

Написать комментарий

Последние статьи

Яндекс.Метрика
?>