четверг, 10 марта 2011 г.

Установка сертификата с подписью на месяц verisign-ом

Рассматривается система apache-backend+nginx-frontend
Есть варианты:
1) в обход nginx. Apache сразу слушает на 443 порту
2) nginx-proxy
3) сертификат на nginx, а дальше общение открытым текстом.
Впрочем, есть вариант "голого" nginx, без апача:
http://silverghost.org.ua/2010/10/27/nginx-ssl-shifrovanie/

Рассмотрим вариант 3
Для начала, надо проверить, что есть поддержка http_ssl_module, который надо подключать во фре.
cd /usr/ports/www/mginx
make config
Находим строчку HTTP_SSL_MODULE, ставим там крестик и пересобираем.
В centos штатно этот модуль есть и его надо просто подключить.

Создаем etc/nginx/cert и переходим туда
Есть неплохая дока от verisign по созданию сертификата под апач. Там же можно для пробы сделать 30-дневный ключ.

Создаем ключ.
openssl genrsa –des3 –out .key 2048

Ключ должен быть 2048 бит!
Retail customers Note: The recommended key bit size is 2048-bit. All certificates that will expire after October, 2013 must have a 2048 bit key size.
MPKI for SSL customers Note: The recommended key bit size is 2048-bit. All certificates that will expire after December, 2013 must have a 2048 bit key size.

Спросит пароль - его лучше ввести для защиты от утаскивания ключа. Если же безопасность не волнует, из строки генерации надо убрать -des3

Теперь создаем сертификат

openssl req –new –key .key –out .csr

Есть особенности заполнения, лучше читать доку с verisign - даже если и создаст сертификат, попытка его подписать в нормальном месте закончится неудачно, если что-то неверно.
В данном примере файл можно назвать как csr (Certificate Signing Request) и как .pem, главное придерживаться единого формата.
В common name вписываем адрес нашего сайта.
По заполнению CSR есть на русском - на ssl.ru. Обращаем внимание на заполнение поля о фирме:
"Форма собственности указывается исключительно латинскими буквами, либо в Европейской интерпретации. Например:
OOO = Ltd или LLC
OAO = OJSC, JSC или OAO (латинскими)
ZAO = CJSC или JSC."
Про почту:
"Please do not enter an email address, challenge password or an optional company name when generating the CSR.". С verisign

После перезапуска nginx обнаруживаем несколько неприятных моментов.
1) сертификат не принимает - неизвестный сертификат издателя
2) при перезапуске nginx просит пароль.
От 1 - надо на каждом клиенте импортировать сертификат.. Или подключить к своему сертификату корневой (verisign), но у меня не получилось - не хотел принимать.

syntax: ssl_certificate файл
default: нет
context: http, server
Директива указывает файл с сертификатом в формате PEM для данного виртуального сервера. Если вместе с основным сертификатом нужно указать промежуточные, то они должны находиться в этом же файле в следующем порядке — сначала основной сертификат, а затем промежуточные. В этом же файле может находиться секретный ключ в формате PEM.
отсюда
Сохранил корневой сертификат с ссылки выше и сделал cat verisign.pem >> my.pem, перезапустил нгинх... Не заработало. В смысле, всё-равно надо принимать исключение. Хотя мне уже кажется, проблема не в подключении, а в корневом сертификате...

Теперь вариант 1 - через apache
Тут есть свои нюансы, например сертификат проверяет имя, но обращается не по имени сайта, а по айпи. То есть, надо иметь по айпи на сертификат.
дока
Создаем хранилице сертификатов, например /etc/httpd/ssl
Копируем туда наши ключики. Переименовываем сертификат в .crt - требование апача.

Открываем раздел VirtualHost и пишем туда:
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
Этим мы включаем ssl.

Для апача можно указать отдельную директиву - корневой сертификат
SSLCACertificateFile – This will need to point to the the intermediate file
SSLCertificateFile – This will need to point to the your SSL certificate itself that we issued to you
SSLCertificateKeyFile – This will need to point to the private key file associated with your certificate.

Note: Some versions of Apache will not accept the SSLCACertificateFile directive. Try using SSLCertificateChainFile instead.

Перезапустим апач.. И получим УПС, если у нас не стоит mod_ssl. Во фре он собирается через make config && make deinstall && make reinstall
В центоси через yum install mod_ssl
Небольшая статья-подсказка
У меня уже были настроены хосты, поэтому я убрал штатно поставленный ssl.conf, скопировал основной хост, вписал в начало
Listen 443
LoadModule ssl_module modules/mod_ssl.so

NameVirtualHost *:443

(тут старые настройки) и в конец

SSLEngine on
SSLCertificateFile "/etc/httpd/ssl/s.crt"
SSLCertificateKeyFile "/etc/httpd/ssl/s.key"
SSLCertificateChainFile "/etc/httpd/ssl/verisign.crt"


Для пробы сойдет. Но надо бы за основу взять ssl.conf и подключать сайты оттуда.

==================

Если нам надоел запрос ключа при старте - снимем его так
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key

2. Make sure the server.key file is only readable by root:

$ chmod 400 server.key

===================

Частный/приватный ключ начинается со строки (.key)
-----BEGIN RSA PRIVATE KEY-----

Запрос на сертификат (.csr, .pem)
-----BEGIN CERTIFICATE REQUEST-----

Сертификат (.cert, .crt)
-----BEGIN CERTIFICATE-----


Инструкции у RapidSSL
Install certificate on apache
Generate a Certificate Signing Request (CSR) for Apache + Mod SSL + OpenSSL


Комментариев нет:

Отправить комментарий