Pull to refresh

Сертификаты Thawte Inc «дружим» их с nginx+apache для корректной работы в Web приложений под desktop&mobile Browser

В данной статье детали настройки ПО не будут обсуждаться, т. к. все стандартно и без каких либо сложностей. Если возникнут вопросы, то расскажу более подробно

Суть задачи.



Есть проект который работал нормально, но появилась необходимость защитить данный проект по SSL. Обслуживал это все Apache и справлялся с данной нагрузкой, но проект работал и пользователей становилось все больше и больше. Надо было переходить на всем известную связку nginx+apache. Описывать процесс настройки nginx+apache нет необходимости данная тема уже «затерта до дыр» на просторах интернета, есть массу примеров как это все работает даже на habrahabr.ru.

Ход выполнения задачи



Выбор пал на Thawte Inc (thawte.com) процедура заказа сертификата стандартная. Собираем пакет документов отправляем им, они все проверяют и далее по процедуре.
В итоге нам Thawte Inc выдал сертификаты которые необходимо было подключить к нашему Web проекту.
Заходим на сайт компании Thawte Inc (в свой личный акаунт) там Вам будет предложено скачать сертификаты. Сам сертификат и промежуточные сертификаты. Качаем заливаем их на Web сервер.

Для того чтобы подключить наши сертификаты к Apache нет ничего сложного. В настройках VirtualHost прописываем следующие строки, даже сам Thawte Inc дает инструкцию.

SSLEngine on
SSLCertificateFile    /etc/apache2/ssl.d/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl.d/rsa.key
SSLCertificateChainFile /etc/apache2/ssl.d/certificate_apache.crt


где:
certificate.crt — основной сертификата
rsa.key — ключ для сертификата
certificate_apache.crt — промежуточный сертификат
Более подробнее необходимо в документации по SSL.

Все замечательно все работает все довольны, НО! У нас задача сделать это все на nginx+apache

Для этого был установлен nginx
nginx -v
nginx version: nginx/1.2.6


Приступаем к настройке VirtualHost на nginx
Т.к. У нас весь проект должен работать на SSL (443 порт, если по умолчанию), то делаем соответствующие настройки
server {
…....
listen  443 ssl;
ssl on;
ssl_certificate     /etc/apache2/ssl.d/certificate.crt;
ssl_certificate_key /etc/apache2/ssl.d/rsa.key;
keepalive_timeout   70;
ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
…..... }

/etc/apache2/ssl.d/ — там у меня лежат сертификаты, у каждого могут быть свои настройки и пути к файлам.
Все настройки очень подробно описаны в документации к Nginx и не вызывают особых сложностей.
 nginx -t 
— для проверки конфигурации

Отключаем Apache на прослушивание 443 порта, и оставляем ему только работу как бэкэнду.
Перезагружаем сервисы.

Заходим в Ваш любимый браузер (firefox у меня) и видим что по https наш сайт открылся и работает нормально, далее передаем на тест в браузерах сайт тестировщикам пусть занимаются.
Через примерно 30-40 минут мне приходит отчет, что в мобильных браузерах не проходит проверка SSL т. к. не является сертификат доверенным и содержимое не будет загружено. Так-же было в IE Chrome под desktop.

Проверяем все настройки вроде все нормально, в чем проблема, пока не известно. Сертификаты по новой заливаются на сервер, переписываются настройки и начинается «танцы с бубном».

Приступаем к детальному изучению работы SSL прицепу работы сертификатов и компаний которые выдают сертификаты и т. п. Натыкаюсь на такую вещь как промежуточный сертификат. Нам Thawte Inc выдало его, НО как его подключить к nginx, пока не известно.

Документация по nginx написан очень толково и поиск нужного нам ответа занимает около 20 минут. Изучаем и видим такой абзац…

Некоторые браузеры могут выдавать предупреждение о сертификате, подписанном общеизвестным центром сертификации, в то время как другие браузеры без проблем принимают этот же сертификат. Так происходит потому, что центр, выдавший сертификат, подписал его промежуточным сертификатом, которого нет в базе данных сертификатов общеизвестных доверенных центров сертификации, распространяемой вместе с браузером. В подобном случае центр сертификации предоставляет “связку” сертификатов, которую следует присоединить к сертификату сервера. Сертификат сервера следует разместить перед связкой сертификатов в скомбинированном файле:

и нам предлагают выполнить следующее:

cat certificate.crt  certificate_apache.crt > chained.crt


где:
certificate.crt — основной сертификата
certificate_apache.crt — промежуточный сертификат

на выходе мы получаем цепочку сертификатов с название chained.crt

Приступаем к редактированию конфигурации nginx приводим ее к следующему виду

server {
…....
listen  443 ssl;
ssl on;
ssl_certificate     /etc/apache2/ssl.d/chained.crt;
ssl_certificate_key /etc/apache2/ssl.d/rsa.key;
keepalive_timeout   70;
ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
…..... }



 nginx -t 
— для проверки конфигурации, все проходит нормально.
Перезагружаем сервисы.

Далее заходим через Chrome в Android и видим что все у нас прошло нормально, сайт открывается. Отдаем на тестирование в ответ приходит что все работает как и должно быть.

Следовательно мы добились того что от нас требовалось.

П.С. Это моя первая статья на habrahabr.ru, надеюсь что системные администраторы не будут наступать на грабли как я. Данная статья поможет Вам в решении подобной ситуации. Критика приветствуется.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.