Шаг 2, получаем и устанавливаем сертификаты от startssl.
Ссылка на предыдущую статью: Перенос проектов yii2, wordpress, bitrix на nginx + php-fpm с подключением ssl или «да это делается 15 минут». Часть 1.
Регистрируемся в сервисе и ждем подтверждения аккаунта. У меня прошло около 3 дней до получения заветного письма. Для авторизации будет использоваться присланный в письме ключ, лучше его куда-нибудь сохранить, потому что я не подумав оставил все доступы на домашнем компьютере и перенос отложился на 2 дня :)
Авторизуемся здесь через выданный ключ. Подтверждаем владение доменом, подтверждение будет выслано на e-mail, если это зона .pro или .com то на указанный при регистрации, если .ru или другие, то на webmaster@domainname, поэтому предварительно создаем данный ящик.
Дальше, подготавливаем запрос на получение сертификата в консольке:
openssl req -new -newkey rsa:4096 -nodes -keyout example.key -out example.csr
Внимание, здесь нужно указать длину ключа больше 1024, иначе будут проблемы с идентификацией в браузере.
Далее заполняем предлагаемую форму и все, ключ готов.
Идем в панельку startssl и создаем запрос.
Второй шаг пропускаем, т.к. мы сами сгенерировали ключ, на третьем шаге копируем в область ввода содержимое файла example.csr без дополнительных пробелов и прочих символов.
Переходим на следующий шаг, выбираем домен и поддомен для регистрации, ВНИМАНИЕ, я три раза тупил и выбирал не нужные поддомены, а потом при настройке nginx’a мне потребовалось сделать редирект с www на без www, и оказывается нужно было указать в виде поддомена www.
Далее, далее, далее, если все прошло успешно, то мы получим сертификат, сохраняем его в example.crt, так же сохраняем сертификаты для верификации startssl, sub.class1.server.ca.pem .
Если, по каким-либо причинам вы не сохранили выданный сертификат, то ничего страшного, они будут доступны в разделе Tool Box -> Retrieve Certificate.
Некоторые сертификаты должны пройти проверку администрацией, поэтому их получение будет возможно только через несколько часов после регистрирования.
Идем в консольку, объединяем выданные сертификаты и наш ключ в цепочку, первым должен идти наш ключ затем наш сертификат example.crt, затем intermediate, и в конце root certificate.
cat example.key example.crt sub.class1.server.ca.pem ca.pem > example.com.chained.pem
Ложим получившуюся подпись в /etc/ssl и донастраиваем nginx на использование ssl.
Для начала доопределяем прослушку портов 443 в блоке server:
listen 443 ssl; listen [::]:443 ssl; - для ipv6
Делаем редирект с 80 порта:
server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; }
Хотя для индексируемых сайтов не советую делать этого сразу, т.к. яндекс начинает беситься и выкидывать сайт из поиска, с остальными поисковиками все в порядке, яндекс такой яндекс.
Доопределяем ключи ниже в базовом блоке server,а:
keepalive_timeout 60; ssl_certificate /etc/ssl/example.chained.pem; ssl_certificate_key /etc/ssl/example.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "RC4:HIGH:!aNULL:!MD5:!kEDH"; add_header Strict-Transport-Security 'max-age=604800'
И перезагружаем nginx:
service nginx restart
И получаем красивую зелененьку иконочку слева от имени домена ^^.
У startssl есть свои ньюансы, он условно бесплатный, поэтому если хотите по-упражняться в подписывании сертификатов, то лучше выбирайте поддомены не www, иначе отзыв сертификата будет стоит 24$ и редирект с www на без www не получится сделать.
Второй особенностью является то, что необходимо каждые 30 дней валидировать e-mail, иначе сертификаты перестану действовать, но в принципе это нормальная цена за 7 бесплатных сертификатов xD.
Ну и кстати самый зловещий редирект с www на без www, с которым я возился дольше всего, не в плане конфигурации, а в плане того, что мне пришлось перевыпускать все сертификаты заново:
... server { listen 443 ssl; listen [::]:443 ssl; server_name www.domain.com; return 301 $scheme://$server_name$request_uri; } ...
Все, перезагружаем nginx и хватит на этом.
Закончу пожалуй фразой о том, сколько у меня все это заняло времени, с учетом того, что я уже давно не разбирался с конфигами nginx’a и мне пришлось долго копаться в мануалах. Плюс у меня все таки 7 доменов и столько же проектов. Поэтому если не шарите в этом, оценивайте приблизительно это время.
И так… мне потребовалось… 15 часов… 15 ЧАСОВ КАРЛ!!!.