Заметки PHP

Перевод Textpattern-сайта на SSL, работающего на nginx

Опубликовано
Комментарии Нет

В последних заявлениях Google рекомендовал всем сайтам переходить на SSL. По его словам, сайты, которые работают через защищенный протокол будут ранжироваться выше, чем другие сайты без шифрования.

Наверное, глупо игнорировать слова мирового лидера в поисковой выдаче. К тому же, если учесть, что российская поисковая система Yandex идет по пятам у Google (по мнению некоторых людей она отстает ровно на один год) и в ближайшее время будет также учитывать использование SSL.

Как перевести свой сайт на SSL?

Так как этот блог о Textpattern, то переводить на протокол SSL мы будем именно его. Сделаем более надежной и без того безопасную CMS.

Получаем сертификат SSL

Для этого лучше всего подойдет всеми известный StartSSL. Как получить сертификат у этой компании, думаю, объяснять не стоит. Там все просто! Если в кратце, то:

  1. регистрируемся (есть русский язык);
  2. подтверждаем свой домен, которому нужен SSL-сертификат;
  3. генерим CSR самостоятельно командой:
    openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr

    копируем содержимое полученного файла .csr в поле на сайте;
  4. сохраняем сертификат у себя на жестком диске.

В итоге сертификат должен состоять из:

  1. закрытого ключа: sslname.key:
  2. открытой части: sslname.crt

Копируем ключи на сервер

Я рекомендую размещать ключи в /etc/nginx/ssl/имя_домена/, так как при большом количестве сайтов на одном сервере не получится путаницы с ключами.

Генерим ключ для Forward Secrecy

Что такое Forward Secrecy можно прочитать на wiki Для генерации используем команду:

openssl dhparam -out /etc/nginx/ssl/имя_домена/dhparam.pem 4096

Эта команда может выполнятся продолжительное время. Примерно 5-10 мин.

Изменяем конфиг nginx

В файл конфигурации вашего сервера добавляем код:


server {
	listen 443;
	...
	ssl_session_cache shared:SSL:10m;
	ssl_session_timeout 5m;
	ssl_prefer_server_ciphers on;
	ssl_stapling on;
	ssl on;
	resolver 8.8.8.8;
	resolver_timeout 10s;
	keepalive_timeout 60;
	ssl_certificate /etc/nginx/ssl/имя_домена/sslname.crt;
	ssl_certificate_key /etc/nginx/ssl/имя_домена/sslname.key;
	ssl_dhparam /etc/nginx/ssl/имя_домена/dhparam.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers 'EECDH+ECDSA+AESGCM:AES128+EECDH:AES128+EDH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!CAMELLIA:!ADH';
	add_header Strict-Transport-Security 'max-age=31536000';
	add_header X-Frame-Options "DENY";
	add_header X-Content-Type-Options "nosniff";
	add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";

Я вношу этот код непосредственно в конфигурационный файл конкретного домена /etc/nginx/sites-available/имя_домена, но, если у Вас один сайт на сервере, можно и в /etc/nginx/nginx.conf

Также в location ~ \.php$ нужно добавить одну строчку:

location ~ \.php$ {
          fastcgi_param HTTPS on;
          ...
}

Помимо этого не мешало бы добавить редирект с http на https. Для этого в этом же конфиге добавляем код:

server {
        listen 80;
        server_name имя_домена.ru;
        rewrite ^(.*)$ https://имя_домена.ru$1 permanent;
}

Обычно этот год размещается выше всего остального.

Убираем пароль на доступ к приватному ключу SSL-сертификатам

Это тот пароль, который Вы устанавливали при создании сертификата на сайте StartSSL.

openssl rsa -in /etc/nginx/ssl/имя_домена/sslname.key -out /etc/nginx/ssl/имя_домена/sslname.key

и после этого перегружаем nginx. Для Debian это можно сделать командой:

service nginx restart

Теперь необходимо указать textpattern, что сайт работает на HTTPS. Для этого добавляем в основной конфигурационный файл /textpattern/config.php одну строчку:

<?php
	$txpcfg['db'] = 'имя_базы';
	$txpcfg['user'] = 'имя_пользователя';
	$txpcfg['pass'] = 'пароль';
	$txpcfg['host'] = 'localhost';
	$txpcfg['table_prefix'] = '';
	$txpcfg['txpath'] = '/var/www/example.ru/www/textpattern';
	$txpcfg['dbcharset'] = 'utf8mb4';
	define('PROTOCOL', 'https://');
?>

Что делать, если возникает сообщение: «Подключение к веб-серверу защищено, но посторонний пользователь может изменить вид страницы»

Это сообщение возникает из-за того, что на открытой странице вашего сайта подгружаются картинки/видео/js (css) файлы без протокола https. Вам нужно в web-инспекторе посмотреть какие ошибки есть в консоли и исправить все протоколы на https.

Проверка работоспособности SSL на сайте

Помимо красивого зеленого значка в адресной строке браузера работу SSL-сертификата можно проверить на сайте – www.ssllabs.com Этот сайт даже выставляет оценку. Идеальная оценка должна быть А+.

P.S.S. После успешного результата не забываем рассказать Yandex`у о протоколе HTTPS на вашем сайте. В панели вебмастера этот раздел называется Переезд сайта.

upd. 04.04.2017 – замена всех http на https в MySQL через phpmyadmin

Поочередно исполняем команды в поле ввода SQL-кода.

UPDATE textpattern SET body = replace(body, 'http:','https:');
UPDATE textpattern SET body_html = replace(body_html, 'http:','https:');
UPDATE textpattern SET excerpt = replace(excerpt, 'http:','https:');
UPDATE textpattern SET excerpt_html = replace(excerpt_html, 'http:','https:');

Автор
Категории улучшение сайта

Комментарии

Нет комментариев к данной статье.

Комментарии

Поля обозначенные как * требуются обязательно. Перед постингом всегда делайте просмотр своего комментария.





← Старые Новые →