Все об SSL-сертификате: зачем нужен и как установить на свой сайт
Для того, чтобы объяснить, что такое HTTPS, обратимся к истокам.
Большая часть запросов в интернете проходит по протоколу HTTP. Его придумали еще в 90-х годах для передачи текстов с гиперссылками (документы, в которых вшиты ссылки для перехода к другим документам). Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol.
Сайт — это по сути своей документ, который состоит из файлов: текста, картинок, видео и так далее. При помощи HTTP браузер просит сервер отправить данные разного формата для отображения страницы.
Для того, чтобы его открыть, протокол HTTP подходил идеально. За исключением одного «но» — его использование не подразумевает шифрование данных. То есть, пока запрос идет от клиента (вас) к серверу и обратно, к информации о вас и о вашем запросе могут иметь доступ посторонние, например, интернет-провайдер или злоумышленники.
В целях повышения безопасности в интернете компания Netscape Communications в 2000-м году выпустила расширение протокола HTTP — HTTPS (HyperText Transfer Protocol Secure). При использовании HTTPS данные передаются поверх криптографических протоколов SSL или TLS и зашифровываются. Для того, чтобы сайт мог работать по протоколу HTTPS, на домен должен быть выпущен и установлен SSL-сертификат.
Перейдем к понятию SSL/TLS. SSL — это сертификат, который подтверждает подлинность веб-сайта. Аббревиатура переводится как Secure Sockets Layer.
SSL-сертификат подтверждает ваш домен или организации и позволяет установить безопасное соединение. Он содержит индивидуальный ключ вашего домена, с помощью которого информация между сервером и клиентом (вами) зашифровывается.
Протокол SSL был выпущен более 25 лет назад компанией NetScape в нескольких версиях, но ни одна из них не могла полностью обеспечить безопасность данных пользователей. Поэтому в 1999 году компания IEFT создала новую версию сертификата — TLS (Transport Layer Security), которая смогла решить проблемы предшественника. Первые версии протокола сейчас не актуальны, но TLS-соединение 2008 и 2018 года все еще используются в наши дни.
Интересно, что компания IEFT не могла использовать в названии аббревиатуру SSL по юридическим причинам (права на имя принадлежали NetScape), но в обиходе мы до сих пор чаще используем именно название первого протокола.
Правильная настройка работы на вашем сайте SSL-сертификата — это гарантия, что данные между пользователем и веб-сайтом или двумя системами зашифрованы. К таким данным относятся имена, адреса, номера телефонов, номера банковских карт и другая информация. SSL не позволяет сторонним пользователям, в том числе и злоумышленники, воспользоваться ими.
SSL-сертификат позволяет установить TLS-соединение с сервером, которое работает по следующей схеме:
Инструкция по установке бесплатного SSL-сертификата на сайте
Сегодня SSL-сертификат — обязательный атрибут серьезных сайтов. Расскажем, как установить бесплатный SSL-сертификат на сайт.
Что такое SSL-сертификат?
SSL-сертификат — это цифровой сертификат, позволяющий подтвердить подлинность сайта и использовать зашифрованное соединение. Зашифрованное соединение нужно для защиты от считывания и изменения информации между пользователем и сайтом. Благодаря SSL-сертификату злоумышленники не смогут вклиниться в это взаимодействие и что-либо изменить. Так, наличие SSL-сертификата крайне желательно в случае, если пользователь оставляет на сайте свою контактную информацию и данные банковской карты.
Что необходимо для выпуска SSL-сертификата
Для выпуска SSL-сертификата нужно воспользоваться услугами Центра сертификации (ЦС). Центров сертификации довольно много: например, Comodo, GlobalSign — они выпускают платные сертификаты. Стоимость сертификата зависит от разных параметров и может составлять от 3000 до 80000+ рублей в год.
При этом большинству сайтов достаточно проверки по доменному имени или компании. А с технической точки зрения обычный пользователь никогда не ощутит разницы между платным и бесплатным сертификатом.
Сейчас вы научитесь выпускать SSL-сертификат, используя бесплатный Центр сертификации Let’s Encrypt — за 0 рублей.
Как добавить сертификат на сервере
Рассмотрим установку сертификата на примере операционной системы Centos.
Наша команда INDEXIS занимается разработкой веб-проектов с продуктовым подходом и в основном использует технологию «1С-Битрикс». «1С-Битрикс» чаще всего устанавливают на сервер с операционной системой Centos. Этим обусловлен выбор ОС Centos в качестве примера.
Чтобы выпустить бесплатный SSL-letsencrypt сертификат, нужно:
1. Установить certbot и использовать команду: yum install certbot . Это команда для установки софта от ЦС Let’s encrypt, который поможет выпускать и перевыпускать сертификаты.
2. Выпустить сертификат. Есть тонкости при выпуске сертификатов для доменов разного уровня:
2.1. Для конкретного доменного имени (предположим, доменное имя: domain.ru) нужно использовать команду: certbot certonly -d domain.ru -d www.domain.ru . Такой сертификат позволит подключить SSL по двум адресам: domain.ru и www.domain.ru.
2.2. Для поддоменов 3-го уровня, например, dev.domain.ru, есть 2 варианта:
2.2.1. Выпустить по той же команде, но с добавлением адреса конкретного поддомена (в следующей команде используется в качестве примера dev.domain.ry): certbot certonly -d domain.ru -d www.domain.ru -d dev.domain.ru -d www.dev.domain.ru
2.2.2. Выпустить wild-сертификат, который позволит подключить SSL сразу по большому количеству поддоменов без их прямого указания при выпуске сертификата, по команде: certbot certonly -d domain.ru -d *.domain.ru —manual —preferred-challenges dns . В данном случае необходимо подтвердить возможность управления доменным именем с помощью добавления dns-записей у регистратора вашего доменного имени.
После выполнения команды для конкретного случая certbot запросит указать пути расположения сайтов. Это необходимо для проверки возможности управления доменным именем.
Certbot во время проверки положит по указанным вами путям к папке с сайтом свои временные файлы и проверит их. Если файлы доступны внешне по указанным доменным именам, то выпустит сертификат.
3. После выпуска сертификата его нужно применить к софту, который обрабатывает принятие соединений на вашем сервере. На этом этапе лучше воспользоваться помощью вашего системного инженера. Также можно использовать руководство по подключению certbot на официальном сайте.
Особенности использования бесплатного SSL-сертификата
- Расходы владельца сайта на установку SSL-сертификата равны 0.
- Выпущенные сертификаты действуют 90 суток. Системному инженеру каждые 90 дней будет необходимо перевыпускать сертификат (или чаще, если нужно расширить сертификат на новые поддомены).
- Сертификат обеспечивает среднюю глубину проверки сайта. Сайт получает хорошую защиту, которая не уступает платным аналогам.
Если у вас есть вопросы по установке бесплатного SSL-сертификата, пишите в комментариях.
Что такое SSL и TLS, как установить и настроить
Основная установка и настройка будет проходить под Debian 8 Jessie, вебсервер NGINX, в бекенде Apache или PHP-FPM.
Инструментарий: Far Manager и Putty.
Команды вводятся в консоль SSH.
Если вы авторизованы не под root , добавляйте перед консольными командами sudo
Что такое SSL, TLS
SSL (англ. secure sockets layer — уровень защищённых cокетов) — криптографический протокол, который обеспечивает безопасную связь между сервером и клиентом. Этим протоколом шифруется интернет-трафик, который невозможно прослушать. В 2014 году был скомпрометирован (была обнаружена уязвимость), из-за чего на основании протокола SSL 3.0 был создан стандарт TLS, учитывающий ошибки предшественника, а SSL фактически прекратил своё развитие.
TLS (англ. Transport Layer Security — безопасность транспортного уровня) — криптографический протокол, обеспечивающий защищённую передачу данных от сервера к клиенту. TLS является потомком SSL 3.0. В основе работы лежат симметричное шифрование для конфиденциальности, асимметричная криптография для аутентификации и коды аутентичности сообщений для сохранения их целостности.
Данный протокол широко используется в приложениях, работающих с сетью Интернет, таких как веб-браузеры, работа с электронной почтой, обмен мгновенными сообщениями и IP-телефония (VoIP).
Сегодня, когда говорят об SSL, то, как правило, подразумевают его потомка TLS. Поэтому, когда говорят, что нужно установить SSL сертификат на сайт, то, как правило, подразумевают установку TLS сертификата.
Почему нужно использовать SSL/TLS
Есть как минимум одна веская причина: вы не сможете воспользоваться преимуществами нового протокола HTTP2 (HTTP/2 приходит на смену текущему стандарту HTTP/1.1), если для вашего сайта не установлен и настроен сертификат безопасности SSL/TLS.
Также безопасность данных в интернете является всё более востребованной и актуальной темой. И чем дальше, тем больше: Google заявил, что наличие SSL-шифрования на сайте является положительным фактором в ранжировании сайта в поисковой выдаче. Также, наличие HTTPS является обязательным атрибутом для каждого e-commerce сайта: интернет-магазинов, сервисов по приёму платежей, обменников, а также платных сервисов, данные пользователей которых являются желанной добычей хакеров. Чтобы предотвратить фишинг-атаку на пользователя и не дать обмануть его, и нужно настроить SSL-сертификат безопасности и шифрования данных, чтобы он видел подтверждение того, что находится на правильном сайте.
Бесплатные сертификаты SSL/TLS от Let’s Encrypt
Рекомендую воспользоваться сертификатами SSL/TLS от Let’s Encrypt, так как:
- Они бесплатные;
- Подойдут большинству проектов;
- Установка и настройка относительно несложные, и не займут много сил и времени.
Из минусов — сертификат актуален 90 дней, поэтому настроим его обновление на автомате.
Если у Вас виртуальный хостинг, можете написать в службу поддержки, вам помогут получить сертификат и всё настроят. Если же у вас свой сервер, описание получения сертификата SSL, TLS и его настройки на сервере будет дальше.
Установка Certbot
Сам гайд по установке Let’s Encrypt советует делать всё через Certbot. Сработает, если есть доступ по SSH.
Certbot — это утилита от Let’s Encrypt, помогающая в настройке SSL/TLS сертификата на сервер и его дальнейшем обновлении.
Установка Certbot в Debian 8 Jessie
Помощник Certbot в выборе версии сервера
Сначала убедимся, что certbot ещё не установлен:
certbot —help
Если увидите ошибку, значит, надо его установить.
Если вылезла ошибка The value ‘jessie-backports’ is invalid for APT::Default-Release as such a release is not available in the sources
, нужно настроить поддержку Backports
Как настроить поддержку Backports
Пишете в консоль (добавляет дополнительный источник для пакетов):
Потом обновляете список пакетов:
и снова пробуете установить Certbot:
Затем проверяете, как вышло
Установка Certbot в CentOS 7
Установка происходит так:
Если у Вас CentOS 6, воспользуйтесь универсальной инструкцией ниже.
Универсальная инструкция по установке Certbot
- Скачиваем Certbot:
- Даём права на исполнение с помощью chmod
- Перемещаем certbot-auto к остальным бинарным файлам, чтобы появилась возможность начинать команды с certbot
- Проверяем, что получилось:
Настройка Certbot
Теперь, когда certbot установлен (а вы можете убедиться в этом, задав команду
certbot —help ), советую заглянуть в cron-задачи
В директории должен появиться файл certbot с примерно следующим содержанием
Самая последняя строчка — это правило cron, которое будет проверять сертификаты SSL, TLS дважды в день и обновлять устаревшие. К сожалению, он не перезагружает вебсервер, поэтому Вам нужно добавить правило && /etc/init.d/nginx reload вручную в конец строки.
В итоге, строка будет выглядеть примерно так:
- Открываем расписание планировщика (сначала приведу пример для nano, затем для vim):
- Добавляем новое правило в конце планировщика:
- Затем сохраняем ( Ctrl + X , сохранить кнопкой Y )
Далее, подготовка, тестирование и установка сертификата для сайта.
Подготовка и тестирование конфигурации SSL, TLS
Перед тем, как получить сертификат SSL/TLS, хорошей практикой будет протестировать правильность настройки сервера. Дело в том, что если есть проблема, которая не даст получить или обновить сертификат: центр сертификации имеет жёсткие лимиты обращений к нему (10 в час). И если есть ошибка, которую никак не удаётся выявить, то можно очень быстро упереться в лимит. Чтобы избежать этой проблемы, можно воспользоваться Staging Environment от Let’s Encrypt.
Staging Environment — это тестовая среда, полностью имитирующая общение с центром сертификации, и выдающая недоверенные сертификаты-пустышки. Однако, она имеет повышенные лимиты обращения к ней и служит исключительно для тестирования и настройки конфигурации сервера:
- Выдача и обновление сертификата на 1 домен имеет лимит 30 000 в неделю.
- Ошибка валидации имеет лимит 60 раз в час.
Чтобы воспользоваться тестовой окружающей средой, достаточно для certbot использовать ключ —staging .
Например, так можно протестировать выдачу сертификата:
Кстати, посмотреть, как происходит обновление сертификатов, но без реального обновления, просто проверить правильность конфигурации, можно командой:
А обновить все сертификаты на сервере вручную можно командой
После перезагрузите NGINX
Установка сертификата SSL, TLS от Let’s Encrypt
Вводим команду в консоль Putty:
- -w /var/www/example.com — путь до директории с файлами сайта
- -d example.com -d www.example.com — прописываем имена доменов
- —email [email protected] — ваш email, куда можно будет восстановить доступ
- —agree-tos — согласие с лицензионными требованиями
Если домен в кириллице, надо получить его Punnycode (например, яндекс.рф имеет код xn--d1acpjx3f.xn--p1ai ) и пользоваться этим кодом. Сделать это можно с помощью Punycode-конвертера.
Если всё нормально, вам выдаст сообщение об успешном завершении создания сертификата
Итак, сертификат установлен в директорию /etc/letsencrypt/live/<тут_ваш_домен>/
Идём настраивать NGINX.
Настройка SSL, TLS в NGINX
Открываем конфигурационный файл вашего сайта.
Если NGINX настроен как тут, то конфигурационный файл может быть расположен тут:
/etc/nginx/vhosts/example.com.conf
Для уменьшения загрузки процессора официальная документация рекомендует
- установить число рабочих процессов равным числу процессоров,
- разрешить keep-alive соединения,
- включить разделяемый кэш сессий,
- выключить встроенный кэш сессий
- и, возможно, увеличить время жизни сессии (по умолчанию 5 минут):
Изменения я буду комментировать
Сохранили, проверили, перезагрузили
Настройка SSL, TLS на WordPress
Для примера, возьмём сайт на WordPress и настроим на нём SSL/TLS, сделаем его доступным по HTTPS.
Нужно будет обязательно пройтись по списку и внести соответствующие изменения:
- Переписать в базе данных все ссылки, заменив http://example.com на https://example.com
Для этого, вы можете воспользоваться WP-Cli или специальной утилитой Seach Replace DB - Переписать в файлах темы все ссылки, заменив http:// на https:// или //
- Отредактировать wp-config.php , а именно, перед define(‘WP_DEBUG’, false); добавить:
2 и 3 строки не обязательны, если выполнили первый пункт списка.
Как перенести сайт с HTTP на HTTPS правильно
Я считаю, что можно не ждать склейки http и https, и сразу настроить редирект на https, они всё равно склеятся, но далее приведу рекомендации, которые дают специалисты по поисковому продвижению
Если вы переводите существующий проиндексированный сайт на SSL, то сначала рекомендуется, чтобы Yandex склеил http и https версии сайта. Для этого, вы должны сначала настроить сайт так, чтобы он был доступен и по http, и по https верно, а затем прописать в robots.txt нужный адрес в директиве Hosts.
Не забудьте добавить новую версию сайта на HTTPS в Яндекс Вебмастер и Google Webmasters.
Вот, скажем, пример файла robots.txt для сайта sheensay.ru
Далее, рекомендуется, чтобы все внутренние ссылки были относительными либо начинались строго с протокола https:// . У всех внешних javascript скриптов, ссылок, вставленных картинок, аудио- и видеоплееров, и других внешних объектов протоколы http:// заменяются на абсолютные https:// или относительные // .
Приведу пример:
- НЕПРАВИЛЬНО: <img src=»http://placehold.it/250×250″>
- ПРАВИЛЬНО: <img src=»//placehold.it/250×250″>
- ПРАВИЛЬНО: <img src=»https://placehold.it/250×250″>
Далее, проверяем секцию head, ищем теги <rel rel canonical=»»> и <rel rel alternate=»»> , и следим, чтобы адреса в них начинались с https://
Таким образом, вы добьётесь более быстрой склейки разных версий сайта в одну.
Далее, дождавшись, когда Яндекс всё склеит правильно, можно настроить 301 редирект с http на https
Как настроить 301 редирект с HTTP на HTTPS
Для NGINX мы настраивали редирект выше, поэтому если редирект настроили в нём, в Apache ничего не меняем. Но, для примера, покажу блок, ответственный за него
301 редирект с HTTP на HTTPS в NGINX
Тут нужно указать 2 блока server , для http (там мы настраиваем редирект) и для https
301 редирект с HTTP на HTTPS в .htaccess (Apache)
Если у Вас основной сервер Apache, в его конфигурационном файле ( apache.conf ) или в .htaccess в корне сайта прописываем
Эта конструкция отлавливает все запросы к портам, отличным от 443 (а именно на 443 порту сидит SSL), и редиректит на нужную версию сайта с HTTPS.
Если у вас во фронтенде NGINX, то редирект в .htaccess может и не сработать. В таком случае, рекомендую воспользоваться редиректом в WordPress.
301 редирект с HTTP на HTTPS в WordPress
Чтобы сделать 301 редирект на https в wordpress, достаточно найти в корне сайта wp-config.php и прописать там в любом месте (если ещё не прописано, example.com меняете на свой домен):
В большинстве ситуаций этого достаточно.
Если доступа к wp-config.php нет, то есть ещё один вариант.
Код ниже используете в MU Plugin, также можно создать обычный плагин (требует активации) или вставить в functions.php рабочей темы:
Перед включением кода убедитесь, что сайту уже присвоен HTTPS: (Настройки — Общие)
Как проверить правильность работы SSL, TLS
В интернете можно найти множество сервисов, которые помогут определить, как правильно вы установили SSL и настроили сайт под него.
Один из таких сервисов: ssllabs.com
Рекомендую проверять правильность установки и настройки сертификата SSL/TLS с помощью ssllabs.com
Вы просто вводите адрес сайта и через несколько минут получаете результаты теста. Например, вот высший результат тестирования ( A+ ) по домену https://sheensay.ru
Результат тестирования SSL/TLS
Как усилить безопасность SSL, TLS
Бывает так, что сертификат установлен, а тестирование ssllabs показывает не лучший грейд безопасности.
Чтобы добиться заветного A+ , нужно правильно настроить NGINX.
Для этого, сначала запускаем следующую команду, которая сгенерирует нужные ключи для Forward Secrecy (прямая секретность означает, что если третья сторона узнает какой-либо сеансовый ключ, то она сможет получить доступ только к тем к данным, что защищены этим ключом, не более):
Затем, необходимо присутствие следующих записей в конфигурации сервера:
После всех манипуляций, не забудьте перезагрузить NGINX
Видео установки и настройки SSL сертификата в хостинге Beget
Если Вы хотите установить SSL, TLS сертификат на сайт, который расположен в Beget, Вам пригодится следующая видеоинструкция:
Как установить SSL/TLS, если на сервере несколько сайтов
Обычно, проблемы возникают, когда на сервере уже есть 1 сайт на HTTPS, и на этот сервер нужно перенести другой сайт.
Либо, ещё более патовая ситуация: нужно перенести сайт на HTTP и сделать его доступным по HTTPS. Проблема будет возникать из-за того, что на сервере на порту 443 уже есть сайт с сертификатом SSL/TLS, и обращения будут идти на него, и certbot не сможет прописать сертификат сайту, а сайты по HTTP будут недоступны.
Для решения этой проблемы можно сгенерировать временный самоподписанный сертификат:
Эта команда создаст 2 файла в директории, из которой вызывается команда (обычно это /root ):
- cert.pem — это сертификат SSL/TLS;
- key.pem — это ключ к сертификату.
Самоподписанные сертификаты годится, скорее, для служебных целей, нежели чем для использования на рабочих сайтах. Дело в том, что к ним нет никакого доверия, они не обеспечивают должной защиты для пользователя, и браузеры будут предупреждать об этом. Но, скажем, в случае настройки сервера с несколькими сайтами, а также для редиректа с HTTPS на HTTP вполне годятся.
Ещё пример, когда такое решение пригодится — на CloudFlare, настроенном на Flexible SSL, плагин Broken Link Checker при сканировании выдаёт ошибки доступа к изображениям Connection Failed . И тут тоже помогут самоподписанные сертификаты на 443 порту сайта.
Ключи прописываете в конфигурации сервера (пример есть ниже). Далее:
- Если сайт нужен по HTTP, просто делаете редирект с HTTPS на HTTP, по аналогии с редиректом на HTTPS, только наоборот (пример далее);
- Если сайт нужен по HTTPS, делаете сайт доступным по HTTP, затем получаете сертификат с помощью certbot, а дальше всё как по инструкции выше — редирект на HTTPS, прописывание сертификатов, настройка URL, и так далее.
Пример, как сделать редирект с HTTPS на HTTP в NGINX
Допустим, самоподписанные сертификаты сгенерированы командой выше и располагаются в каталоге /root/ . Тогда, чтобы настроить редирект с HTTPS на HTTP для нового сайта example.com , мы можем использовать следующую конфигурацию ( example.com заменяем на свой домен, 1.2.3.4 — на свой IP сервера):
SSL certificate problem: certificate has expired
Что делать, если при запросах curl вылезает ошибка:
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html
Самым правильным вариантом будет обновление сертификатов на сервере. В Linux Debian, Ubuntu это делается так:
Эта команда обновляет символические ссылки сертификатов в /etc/ssl/certs .
База знаний
Для установки бесплатного SSL сертификата Let’s Encrypt необходимо выполнить следующее: 1.
Установка платного сертификата Загружаем файлы сертификата (certificate.key, certificate.crt.
В статье указаны цепочки сертификатов, которые потребуются для установки GlobalSign SSL.
Инструкция по активации сертификата доступна по ссылке. В этой статье мы расскажем о.
Данные для установки SSL-сертификата отправляются во время активации сертификата (CSR и Private.
Для установки платного SSL-сертификата вам потребуется выполнить следующие шаги. Купить SSL.
Статья содержит следующие разделы: Установка сертификата Let’s Encrypt Как настроить редирект.
Окружение Bitrix 7.2 поддерживает выпуск, автоматическую установку и продление бесплатных.
Статья содержит следующие разделы: Установка Cerbot Выпуск сертификата на основной домен и.
Для установки SSL сертификата на наш хостинг или VPS / выделенный сервер с панель управления.