Настройка OCSP Stapling на серверах Apache и Nginx
Linux, VPS | Комментировать запись
Прежде чем приступить к настройке, нужно ознакомиться с некоторыми требованиями данного руководства. Эта статья использует свободные сертификаты, выданные StartSSL, а также основывается на руководствах:
- Установка нескольких SSL-сертификатов на один IP с помощью Apache в Ubuntu 12.04;
- Установка нескольких SSL-сертификатов на один IP с помощью Nginx на Ubuntu 12.04.
Что такое OCSP?
OCSP (или Online Certificate Status Protocol) – это протокол, проверяющий, был ли отозван SSL-сертификат. Он был создан в качестве альтернативы CRL, с целью уменьшить время SSL-переговоров. В случае с CRL (Certificate Revocation List) браузер загружает список серийных номеров отозванных сертификатов и проверяет текущий сертификат, что увеличивает время SSL-переговоров. Используя OCSP, браузер посылает запрос к OCSP URL и получает ответ, содержащий состояние достоверности сертификата.
Что такое OCSP stapling?
OCSP stapling – это расширение TLS/SSL, целью которого является повышение производительности SSL-переговоров при сохранении конфиденциальности посетителя.
Две основные проблемы OCSP – это приватность и большая нагрузка на серверы центров сертификации.
Чтобы связаться с центром сертификации (или ЦС) и подтвердить статус сертификата, OCSP требуется браузер. Это нарушает конфиденциальность, поскольку ЦС знает, какой именно сайт был открыт и кто именно получает доступ к нему.
При большом количестве посетителей веб-сайта HTTPS OCSP-сервер ЦС должен обрабатывать все запросы посетителей.
OCSP stapling позволяет владельцу сертификата запрашивать сам OCSP-сервер и кэширует полученный ответ. Этот ответ «сшивается» (staple) с TLS/SSL рукопожатием через Certificate Status Request. В результате серверы ЦС не перегружаются запросами, а браузеры больше не раскрывают подробностей третьим лицам.
Проверка поддержки OCSP stapling
OCSP stapling поддерживается на:
- HTTP-сервере Apache (>=2.3.3)
- Nginx (>=1.3.7)
Прежде чем приступить к настройке, проверьте версию веб-сервера с помощью следующих команд.
Apache:
apache2 -v
Nginx:
nginx -v
Примечание: пользователям CentOS/Fedora нужно заменить apache2 на httpd.
Извлечение пакета ЦС
Извлеките root и промежуточный сертификат ЦС в формате PEM и сохраните их в одном файле. Чтобы получить root и промежуточный сертификат StartSSL, выполните:
cd /etc/ssl
wget -O - https://www.startssl.com/certs/ca.pem https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem> /dev/null
Если ЦС предоставляет сертификаты в формате DER, конвертируйте их в PEM. К примеру, сертификаты DigiCert предоставляются в формате DER; чтобы скачать и конвертировать их, нужно использовать команды:
cd /etc/ssl
wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null
wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVCA-1.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null
Данные команды используют tee для записи в файл; соответственно, при работе через пользователя с повышенными привилегиями (не root) нужно использовать sudo tee.
Настройка OCSP Stapling на Apache
Отредактируйте файл виртуальных хостов SSL и внесите в директиву <VirtualHost></VirtualHost> следующий код:
sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLCACertificateFile /etc/ssl/ca-certs.pem
SSLUseStapling on
Затем укажите расположение кэша вне директивы <VirtualHost></VirtualHost>.
sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
Если вы следовали данному руководству по установке SSL-сертификатов на Apache, файл виртуального хоста будет выглядеть так:
/etc/apache2/sites-enabled/example.com-ssl.conf
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName example.com
DocumentRoot /var/www
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key
SSLCACertificateFile /etc/ssl/ca-certs.pem
SSLUseStapling on
</VirtualHost>
</IfModule>
Затем протестируйте конфигурации, чтобы заранее выявить ошибки:
apachectl -t
Если появится сообщение «Syntax OK», перезапустите сервер.
service apache2 reload
Теперь перейдите на веб-сайт через IE (в Vista и т.п.) или Firefox 26 + и проверьте журнал ошибок.
tail /var/log/apache2/error.log
Если файл, указанный в директиве SSLCACertificateFile, отсутствует, будет выведено подобное сообщение об ошибке:
[Fri May 09 23:36:44.055900 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02217: ssl_stapling_init_cert: Can't retrieve issuer certificate!
[Fri May 09 23:36:44.056018 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02235: Unable to configure server certificate for stapling
Если никаких сообщений об ошибках не появилось, переходите к завершающим действиям.
Настройка OCSP stapling на Nginx
Отредактируйте файл виртуального хоста и внесите в раздел server {} следующий блок кода:
sudo nano /etc/nginx/sites-enabled/example.com.ssl
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;
Если, чтобы настроить SSL-сертификаты на Nginx, вы следовали данной статье, то виртуальный хост будет выглядеть так:
/etc/nginx/sites-enabled/example.com.ssl
server {
listen 443;
server_name example.org;
root /usr/share/nginx/www;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/example.org/server.crt;
ssl_certificate_key /etc/nginx/ssl/example.org/server.key;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;
}
Теперь нужно убедиться, что все работает должным образом; для этого нужно протестировать конфигурации:
service nginx configtest
Перезапустите nginx:
service nginx reload
Затем откройте веб-сайт через IE (в Vista и т.п.) или Firefox 26 + и проверьте журнал ошибок.
tail /var/log/nginx/error.log
Если в файле, указанном в ssl_trusted_certificate, отсутствует сертификат, появится ошибка:
2014/05/09 17:38:16 [error] 1580#0: OCSP_basic_verify() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:Verify error:unable to get local issuer certificate) while requesting certificate status, responder: ocsp.startssl.com
Если же ошибок не обнаружено, переходите к следующему разделу руководства.
Тестирование OCSP Stapling
Данный раздел описывает два способа проверки работы OCSP stapling: инструмент командной строки openssl и SSL-тест на Qualys.
Команда openssl
Данная команда выводит раздел, который говорит, соответствует ли этот веб-сервер данным OCSP. Этот раздел (найденный командой grep) выглядит так:
echo QUIT | openssl s_client -connect www.somesite.com:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'
Замените www.somesite.com своим доменным именем. Если OCSP stapling работает должным образом, появится такой результат:
OCSP response:
======================================
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: 4C58CB25F0414F52F428C881439BA6A8A0E692E5
Produced At: May 9 08:45:00 2014 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: B8A299F09D061DD5C1588F76CC89FF57092B94DD
Issuer Key Hash: 4C58CB25F0414F52F428C881439BA6A8A0E692E5
Serial Number: 0161FF00CCBFF6C07D2D3BB4D8340A23
Cert Status: good
This Update: May 9 08:45:00 2014 GMT
Next Update: May 16 09:00:00 2014 GMT
Отсутствие какого-либо результата означает, что OCSP stapling не работает.
Онлайн-тест Qualys
Чтобы проверить работу OCSP stapling онлайн, перейдите на этот сайт. Когда тестирование будет завершено, найдите строку OCSP stapling в разделе Protocol Details.
Tags: Apache, Linux, NGINX, OCSP, OCSP Stapling, OpenSSL, Qualys, SSL, VPS