Настройка Nginx для HTTPS
Настройка HTTPS сводится как правило к указанию в конфиге хоста сертификата и ключа, обычно при инсталяции nginx'a генерятся сертификаты, ключи, в каталоге /etc/nginx/ssl и файл ssl.conf в /etc/nginx, который можно указывать в конфигах хостов.
Пример принудительного https с самоподписанным сертификатом для phpmyadmin
pma.conf
Опустим установление TCP соединения...
Первое что происходит это клиент говорит какие версии протокола TLS/SSL и какие шифры он поддерживает, после сервер отвечает выбраной версией протокола и шифра + отсылает публичный сертификат, клиент проверяет его и генерит ключ сессии (сеанса), который отправляет обратно серверу и далее этот ключ используется для шифрования.
Для наглядности:
Cсылки:
Настройка TLS, шифров и прочие полезные штуки.
Неплохое видео по данной тематике.
GCR - либа для отображения информации о сертификатах.
Пример принудительного https с самоподписанным сертификатом для phpmyadmin
pma.conf
server { listen 80; # Не забыть повесить хост на порт и указать ssl listen 443 ssl; server_name pma.example.com; # Добавляем сюда файл в котором указаны ключи include /etc/nginx/ssl.conf; # Принудительный https if ( $scheme = "http" ) { rewrite ^/(.*)$ https://$host/$1 permanent; } root /var/www/pma; location / { index index.php; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }Для кошерного сертификата необходимы некоторые телодвижения, в плане приведения цепочки сертификатов к одному. Я ставлю сертификаты выданные COMODO, как правило это ключ и архив с сертификатами:
pma.example.com.key << key ----------------------------------------------- pma.example.com.zip << архив и его содержимое AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt example_com.crtСодержимое архива собирается таким образом:
cat pma_example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > pma.example.com.crtНа выхлопе у нас будет pma.example.com.crt, который с pma.example.com.key заливаем на сервер и добавляем в конфиг вместо
include /etc/nginx/ssl.conf;
ssl_certificate /etc/nginx/ssl/pma.example.com.crt; ssl_certificate_key /etc/nginx/ssl/pma.example.com.key;Немного о том как работает HTTPS
Опустим установление TCP соединения...
Первое что происходит это клиент говорит какие версии протокола TLS/SSL и какие шифры он поддерживает, после сервер отвечает выбраной версией протокола и шифра + отсылает публичный сертификат, клиент проверяет его и генерит ключ сессии (сеанса), который отправляет обратно серверу и далее этот ключ используется для шифрования.
Для наглядности:
- Установка TCP соединения
- Клиент посылает:
- Какие версии протокола (ssl/tls) он поддерживает
- Список шифров которые поддерживает
- Сервер посылает
- Выбраную версию протокола
- Выбраный шифр
- Сертификат
- Клиент
- Проверяет сертификат
- Обменивается ключами RSA/DH
- Сервер
- Принимает обмен ключами
- Проверяет message authentification code
- Отправляет первое шифрованое сообщение "Finished"
- Далее уже идет шифрованый HTTP request и HTTP response
Cсылки:
Настройка TLS, шифров и прочие полезные штуки.
Неплохое видео по данной тематике.
GCR - либа для отображения информации о сертификатах.