суббота, 20 июля 2013 г.

Получение, установка и проверка SSL сертификата, подписанного StartSSL

1. Необходимо доказать права на управление доменом.

Идем в Validation Wizard, выбираем валидацию домена и получаем письмо на postmaster@домен с кодом проверки. Валидация действует 90 дней, после чего валидацию необходимо повторить, если необходимо.

2. В Certificates Wizard выбираем Web Server SSL/TLS Certificate.

Вводим полностью доменное имя, для которого нужно сгенерировать сертификат. Можно ввести до пяти доменных имен на один сертификат, что полезно когда не поддерживаются виртуальные хосты, например на почтовом сервере.
Генерируем файл запроса сертификата (CSR) openssl req -newkey rsa:2048 -keyout ssl.key -out ssl.csr . Содержимое ssl.csr вставляем в текстовое поле на странице. Нажимаем "Submit", в ответ получаем архив с набором сертификатов под различные нужды.
При генерации файла запроса сертификата создается закрытый ключ ssl.key, защищенный паролем, без которого набор сертификатов бесполезен. Поэтому необходимо сделать его резервную копию и не забыть пароль.

3. Устанавливаем сертификаты.

Так как наш закрытый ключ защищен паролем, и вводить его каждый раз при запуске сервера сложно, необходимо пароль снять. Для этого выполняем команду openssl rsa -in ssl.key -out ssl.key , сохраняем измененный закрытый ключ в специальной папке (на CentOS 6 это /etc/pki/tls/private/) и проверяем права доступа к нему (типично доступ должен быть только у рута на чтение).

Для работы многих программ (lighttpd, dovecot, postfix) необходим единственный файл сертификата, содержащий все промежуточные сертификаты. Он делается простой конкатенацией сертификатов из архива OtherServer: cat 2_домен.crt 1_Intermediate.crt root.crt >/etc/pki/tls/certs/server.pem .

3.1. Настройка Апача.

В Апаче сертификаты описываются следующими параметрами конфигурационного файла.
SSLCertificateKeyFile /etc/pki/tls/private/ssl.key # наш закрытый ключ, незащищенный паролем
SSLCertificateFile /etc/pki/tls/certs/ssl.crt # файл из архива сертификатов для Апача с именем 2_домен.crt
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt # файл из архива сертификатов для Апача с именем 1_root_bundle.crt
Не забываем проверить остальные настройки SSL, какими они должны быть подробно описано в Интернете.

3.2. Настройка Postfix

В Postfix'е за SSL-сертификаты отвечают следующие параметры конфигурационного файла main.cf.
smtpd_tls_cert_file = /etc/pki/tls/certs/server.pem # созданный объединением сертификатов из архива OtherServer
smtpd_tls_key_file = /etc/pki/tls/private/ssl.key # наш закрытый ключ, незащищенный паролем
Также для работы шифрования должны быть установлены следующие параметры
smtpd_tls_security_level = may
smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
tls_random_source = dev:/dev/urandom

3.3. Настройка Dovecot

В Dovecot'е за SSL-сертификаты отвечают следующие параметры конфигурационного фала.
ssl_cert = </etc/pki/tls/certs/server.pem
ssl_key = </etc/pki/tls/private/ssl.key
Также для работы шифрования необходимо установить параметр
ssl = required

3.4. Настройка Lighttpd

В Lighttpd цепочка сертификатов и закрытый ключ объединяются в один файл cat /etc/pki/tls/private/ssl.key /etc/pki/tls/certs/server.pem >/etc/pki/tls/private/lighttpd.pem (не забываем про права доступа к файлу).
И прописывается в конфигурационном файле в параметре ssl.pemfile = "/etc/pki/tls/private/lighttpd.pem"
Нужно не забыть включить ssl параметром ssl.engine = "enable"

4. Проверяем сертификаты.

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

Для проверки корректности шифрования необходимо выполнить команду: openssl s_client -showcerts -connect localhost:443. В ответ должны получить что-то типа Verify return code: 0 (ok).
Если для запуска шифрования необходима команда STARTTLS, то проверка будет запускаться таким образом: openssl s_client -starttls smtp -showcerts -connect localhost:25

При выполнении проверки мне встречались такие ошибки. Verify return code: 20 (unable to get local issuer certificate) и Verify return code: 21 (unable to verify the first certificate). Они говорит о том, что openssl не знает, где взять ключи издателей. Нужно ему подсказать, добавив ключ -CApath /etc/ssl/certs или -CAfile /usr/share/curl/ca-bundle.crt, у меня они нашлись в этом файле.

Команда openssl с опцией -showcerts показывает сертификаты в закодированном виде. Чтобы увидеть их содержимое можно использовать команду openssl x509 -noout -text -startdate -enddate -in /tmp/cert, где /tmp/cert - файл, в котором сохранен закодированный сертификат.

Для проверки надежности шифрования можно воспользоваться сервисом Qualis SSL Labs