4Debian.Info - Портал русскогоязычного сообщества Debian Карта сайта Контакты

Меню

Репозитории Debian

Скачать Debian

Установка Debian - Видео



Авторизация:

Новые статьи

Статьи в RSS

Новые комментарии

Новые уроки

Уроки в RSS


Вернутся к списку статей

Привязываем SSL к nginx

В данной заметке я расскажу как быстро привязать ssl сертификат к nginx. Испытания мы проведем тестовом сервере с тестовым сертификатом, который запросим у Comodo.

Итак, для начала определимся что у нас есть. А есть у нас один nginx сервер который смотрит в Интернет. И, для простоты, один внутренний (с ip 10.10.10.10) для которого и будет создаваться стандартное и ssl подключение. Конечно, серверов может быть сколько угодно. Но мы с вами сейчас не будем усложнять.

Для начала нам необходимо создать CSR-запрос на сертификат. Бесплатно можно его сделать либо напрямую у Comodo, либо через сайт http://www.freessl.su/. Мы будет делать через http://www.freessl.su/.

Конфигурационные файлы от nginx у меня лежат в каталоге /etc/nginx. Создаем там подкаталог ssl и переходим в него.

bash:
  1. mkdir /etc/nginx/ssl
  2. cd /etc/nginx/ssl

Далее необходимо создать CSR запрос. Для этого сначала создадим файл приватного ключа следующей командой:

bash:
  1. openssl genrsa -des3 -out secure.website.ru.key 2048

Если вы хотите создать файл ключа без пароля, то введите следующую команду

bash:
  1. openssl genrsa -out secure.website.ru.key 2048

Далее создадим файл запроса на генерацию сертификата. Для этого пишем команду:

bash:
  1. openssl req -new -key secure.website.ru.key -out secure.website.ru.csr

И заполняем поля. После этого будет сгенерирован файл /etc/nginx/ssl/secure.website.ru.csr. Скопируем его содержимое и идем на сайт http://www.freessl.su/. Там заполняем поля ФИО, Телефон, email и вставляем содержимое файла secure.website.ru.csr в поле CSR. Нажимаем далее, выбираем подходящий контактный email.

После этого на почтовый ящик от Comodo придет письмо с просьбой подтвердить создание ssl сертификата. В письме будет указан код подтверждения. Перейдите по ссылке в письме и подтвердите.

Через некоторое время вам придет файл с сертификатом и файл с промежуточными сертификатами. Скопируйте их содержимое в /etc/nginx/ssl/secure.website.ru.crt.


bash:
  1. cat secure_website_ru.crt >> /etc/nginx/ssl/secure.website.ru.crt
  2. cat secure_website_ru.ca_bundle >> /etc/nginx/ssl/secure.website.ru.crt

На этом формирование сертификата закончено. Переходим к настройке nginx. Для нашего случая конфигурация /etc/nginx/nginx.conf будет выглядеть следующим образом:


bash:
  1. user nginx;
  2.  
  3. worker_processes 1;
  4.  
  5. error_log /var/log/nginx/error.log;
  6. pid /var/run/nginx.pid;
  7.  
  8.  
  9. events {
  10. worker_connections 2048;
  11. }
  12.  
  13.  
  14. http {
  15. upstream www {
  16. server 10.10.10.10 weight=1 max_fails=3 fail_timeout=120;
  17. }
  18.  
  19. include /etc/nginx/mime.types;
  20. default_type application/octet-stream;
  21.  
  22. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  23. '$status $body_bytes_sent "$http_referer" '
  24. '"$http_user_agent" "$http_x_forwarded_for"';
  25.  
  26. access_log /var/log/nginx/access.log main;
  27.  
  28. sendfile on;
  29.  
  30. #Секция для стандартного подключение по 80 порту
  31. server {
  32. listen 80;
  33. server_name secure.website.ru;
  34. reset_timedout_connection on;
  35. location / {
  36. proxy_pass http://www/;
  37. proxy_next_upstream error timeout invalid_header http_500 http_503;
  38. proxy_set_header Host $host;
  39. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  40. proxy_redirect off;
  41. proxy_connect_timeout 100;
  42. }
  43. }
  44.  
  45. # Секция для подключения по ssl
  46. server {
  47. listen 443 ssl;
  48. server_name secure.website.ru;
  49.  
  50. access_log logs/ssl-access.log;
  51. error_log logs/ssl-error.log;
  52.  
  53. ssl_certificate ssl/secure.website.ru.crt;
  54. ssl_certificate_key ssl/secure.website.ru.key;
  55. ssl_verify_depth 3;
  56.  
  57. keepalive_timeout 60;
  58. location / {
  59. proxy_pass http://test/;
  60. proxy_next_upstream error timeout invalid_header http_500 http_5
  61. proxy_set_header Host $host;
  62. proxy_set_header X-Real-IP $remote_addr;
  63. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  64. proxy_set_header X-Forwarded-Proto https;
  65. proxy_redirect off;
  66. }
  67. }
  68. }

Сохраняем и перезапускаем nginx.


bash:
  1. /etc/init.d/nginx reload

Вдаваться в детали настроек я не хочу. Про них очень хорошо написано в официальной документации nginx.

Единственное что хотелось бы подчеркнуть, что если вы хотите на 1 сервер повесить несколько разных ssl сертификатов на порт 443, то просто добавить такую конфигурацию не получится:


bash:
  1. server {
  2. listen 443;
  3. server_name www.example.com;
  4. ssl on;
  5. ssl_certificate www.example.com.crt;
  6. ...
  7. }
  8.  
  9. server {
  10. listen 443;
  11. server_name www.example.org;
  12. ssl on;
  13. ssl_certificate www.example.org.crt;
  14. ...
  15. }

В такой конфигурации браузер получит сертификат первого сервера, т.е. www.example.com, независимо от запрашиваемого имени сервера. Это связано с поведением протокола SSL. SSL-соединение устанавливается до того, как браузер посылает HTTP-запрос, и nginx не знает имени запрашиваемого сервера. Следовательно, он лишь может предложить сертификат сервера по умолчанию.

Решение данного вопроса вы можете найти по ссылке.

На этом базовая настройка nginx законена.
4Debian.Info , SSL, nginx

Комментарии: Привязываем SSL к nginx

2016.04.18 14:47 SHarksGANG Ссылка

Где собственно сама ссылка ? О том как повесить на 1 сервер несколько разных ssl сертификатов на порт 443

Только авторизованные пользователи могут оставлять комментарии!

Авторизация или Быстрая регистрация



Яндекс.Метрика
4Debian.Info
При полной или частичной перепечатке текстов статей и публикаций гиперссылка на www.4debian.info обязательна. | "4Debian.Info" | © 2017