Полное руководство по переходу с HTTP на HTTPS

Настройка HTTPS может быть немного пугающей для неопытного пользователя. Для этого нужно располагать определенными знаниями о шифровании и администрировании сервера.

В этом руководстве я поясню отдельные составляющие процесса, а также подробно рассмотрю этапы настройки.

Содержание

HTTP, HTTPS, HTTP / 2, SSL, TLS: Что это такое?

Протокол передачи гипертекста (HTTP) — это базовый коммуникационный протокол, который используется для взаимосвязи клиентов и серверов.

Он передает информацию между браузером и сервером в виде открытого текста. Это позволяет сети, через которую проходит информация, получать доступ к передаваемым данным.

Чтобы решить эту проблему, был создан протокол HTTP Secure (HTTPS). Он позволяет клиенту и серверу установить зашифрованный канал связи.

Защищенный канал создается с помощью протокола безопасности транспортного уровня (TLS), который ранее назывался Secure Socket Layer (SSL).

SSL это протокол, разработанный Netscape, а TLS — это стандарт IETF. На момент написания статьи все версии SSL (1.0, 2.0, 3.0) устарели. В современных браузерах используются версии TLS (1.0, 1.1, 1.2).

В 1996 году мы получили текущую стабильную версию интернета (HTTP 1.1), которую сегодня использует большинство сайтов. Ранее HTTP применялся для передачи не конфиденциального трафика, а HTTPS — для конфиденциального.

Следующее обновление протокола HTTP — HTTP / 2добавляет новые функции, которые повышают производительность и безопасность.

Большинство разработчиков популярных браузеров заявили, что они будут осуществлять поддержку HTTP / 2 только в сочетании TLS.

Преимущества использования HTTPS:

  • Конфиденциальность. Протокол защищает канал связи между двумя сторонами от третьей стороны. Например, без HTTPS кто-то, имеющий доступ к точке Wi-Fi, может видеть номера банковских карт других пользователей этой сети, когда те совершают покупки в интернете.
  • Целостность. Использование этого протокола гарантирует, что информация без изменений достигнет точки назначения.
  • Аутентификация. Это гарантирует, что сайт является тем ресурсом, за кого себя выдает. Использование протокола HTTPS гарантирует, что сайт, который утверждает, что он example.com, на самом деле является example.com. Некоторые SSL-сертификаты даже предусматривают юридическую идентификацию ресурса.

О криптографии

Конфиденциальность, целостность и аутентификация не являются специфичными для HTTPS — это основные понятия криптографии. Рассмотрим их подробнее.

Конфиденциальность

Конфиденциальность — это приватность. Она достигается с помощью шифрования данных.

Чтобы две стороны могли конфиденциально общаться, они должны договориться о двух вещах:

  1. Какой алгоритм шифрования они будут использовать в процессе коммуникации.
  2. Какие параметры, пароль или правила будут использоваться выбранным методом шифрования.

Существует два основных типа шифрования:

  • Симметричные. Обе стороны имеют общий секретный ключ.
  • Асимметричные. У одной из сторон есть пара, состоящая из секретного и открытого ключей. Они являются основой PKI (инфраструктура открытых ключей).

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

Асимметричные методы решают эту проблему. Открытый текст шифруется с использованием одного из ключей и может быть расшифрован только с помощью другого дополнительного ключа.

Предположим, что Алиса и Боб готовы безопасно общаться друг с другом. Они оба имеют пару ключей: закрытый ключ и открытый ключ. Закрытые (секретные) ключи известны только их владельцу. Открытые ключи доступны для всех.

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

Если Боб захочет отправить Алисе ответ, он получит ее открытый ключ и отправит ей зашифрованный текст. Затем Алиса использует свой собственный секретный ключ, чтобы расшифровать полученный текст.

Асимметричное шифрование используется для обмена секретом между клиентом и сервером. Но оно обеспечивает безопасность информации только при передаче данных от клиента к серверу. Информация, зашифрованная открытым ключом, может быть расшифрована только с помощью закрытого ключа. Следовательно, только сервер может расшифровать ее.

Другое направление не защищено. Информация, зашифрованная с помощью закрытого ключа сервера, может быть расшифрована с помощью публичного ключа любым пользователем.

Симметричное шифрование используется для защиты данных в пути, поскольку оно работает быстрее, чем асимметричное. При этом обе стороны (клиент и сервер) являются единственными, кто может шифровать и расшифровывать информацию.

Целостность

Чтобы обеспечить успешную передачу информации, используются дайджесты сообщений. Коды аутентификации сообщений (MAC) являются результатом криптографического хеширования.

Аутентификации

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

Чтобы доказать личность другой стороны, задействована сторонняя доверенная организация — центр сертификации (ЦС). ЦС выдает сертификат, в котором указано, что имя домена example.com связано с открытым ключом XXX. Эта информация действительна в течение определенного периода времени.

Центрами сертификации (ЦС) являются организации, которым доверяется заверять сертификаты. Операционные системы, такие как Windows, MacOS, iOS и Android, а также браузер Firefox имеют список доверенных центров сертификации.

Вы можете проверить, какие ЦС являются доверенными для браузера или платформы:

  • Firefox: «Параметры» → «Дополнительно» → «Сертификаты» → «Просмотр сертификатов» → «Центры сертификации».
  • Windows: «Панель управления» → «Свойства браузера» → «Содержание» — «Сертификаты» → «Доверенные корневые центры сертификации».
  • Mac: «Приложения» → «Утилиты» → «Доступ к цепочке ключей». В разделе «Категория» выберите «Сертификаты».

Все сертификаты проверяются операционной системой или браузером. После этого становятся доверенными напрямую или через субъект, который их верифицировал. Этот механизм транзитного доверия известен как цепочка доверия:

Типы HTTPS-сертификатов

Существует несколько типов HTTPS-сертификатов. Их можно классифицировать по следующим критериям:

Тип валидации

С проверкой домена (DV). DV-сертификат подтверждает, что домен соответствует определенному открытому ключу. Браузер устанавливает безопасное соединение с сервером и отображает иконку закрытого замка. Нажав на нее, вы увидите сообщение типа «Этот сайт не предоставляет информацию о владельце». В браузере не отображается юридическое лицо. Сертификаты DV стоят дешево или предоставляются бесплатно.

С расширенной проверкой (EV). EV-сертификаты подтверждают юридическую организацию. Это самый надежный тип сертификата. Его можно получить только после того, как ЦС проверит юридическое лицо, контролирующее домен, по следующим критериям:

  • Право на управление доменом (например, DV сертификат).
  • Наличие лицензии у компании.
  • Присутствие в бизнес-каталогах (Dunn и Bradstreet, Sales.data.com Salesforce, Yellow Pages и т. д.).
  • Проверка валидности через телефонный звонок.
  • Право владения доменами, перечисленными в сертификате (для сертификатов EV запрещены wildcard-сертификаты).

При нажатии на иконку сертификата отобразятся сведения об организации (название и адрес). Стоимость таких сертификатов составляет от 150 до 300 долларов США в год.

Валидация организации (OV). OV-сертификаты требуют юридической проверки организации. Но в них не отображается название юридического лица. Из-за этого OV-сертификаты менее популярны. Стоимость: от 40 до 100 долларов США в год.

Количество охватываемых доменов

  1. Один домен. Наиболее распространенный тип сертификата, действительный для доменных имен example.com и www.example.com.
  2. Несколько доменов (UCC / SAN) Сертификат унифицированных коммуникаций (UCC) или Subject Alternative Names (SAN), может охватывать ряд доменов. В нем можно указывать разные домены и субдомены. Подобный сертификат рекомендуется использовать для связанных сайтов. С его помощью клиент, проверяющий сертификат любого из сайтов, будет видеть основной домен и все дополнительные.
  3. Wildcard. Сертификата охватывает основной домен, а также неограниченное количество поддоменов. Ограничение заключается в том, что сертификат распространяется только на субдомены основного домена.

Конфигурация

В HTTPS шифрование используется на следующих этапах:

  1. Первоначальный обмен ключами. Используются асимметричные алгоритмы (закрытый и открытый ключи).
  2. Сертификация субъекта (HTTPS-сертификат, выданный центром сертификации). Используются асимметричные алгоритмы (закрытый и открытый ключи).
  3. Шифрование сообщений. Используются симметричные алгоритмы (с общим секретным ключом).
  4. Расшифровка сообщения. Используются криптографические алгоритмы хеширования.

Каждый из этих компонентов имеет набор поддерживаемых алгоритмов, которые используют разные размеры ключей. Поэтому существует несколько вариантов конфигурации.

Набор используемых алгоритмов шифрования (Cipher Suite)

Криптографическая библиотека OpenSSL перечисляет поддерживаемые комбинации в порядке надежности. Наиболее безопасные размещаются сверху списка, а самые ненадежные — внизу.

Во время первоначального рукопожатия между клиентом и сервером используемая комбинация согласовывается до тех пор, пока не будет найдено совпадение, которое поддерживается обеими сторонами.

Узнать, какие криптографические методы следует использовать на сервере, поможет сервис Mozilla SSL Configuration Generator.

Типы ключей

Сертификаты криптографии с эллиптической кривой (ECC) работают быстрее и используют меньше ресурсов процессора, чем сертификаты RSA. Но некоторые сервисы, такие как Amazon, CloudFront и Heroku, пока еще не поддерживают сертификаты ECC.

256-битный ключ ECC считается достаточно надежным.

Сертификаты Rivest Shamir Adleman (RSA) медленнее, но совместимы с более широким спектром старых серверов. RSA-ключи длиннее, поэтому минимально необходимым считается 2048-битный RSA-ключ.

Сертификаты RSA 4096 и выше могут снизить производительность. Они также могут быть подписаны 2048-битным ключом, что сводит на нет часть дополнительных средств безопасности!

Лучший способ определить влияние сертификатов на производительность – отслеживать нагрузку на сервер, на котором размещен сайт.

Процедура получения сертификата

Чтобы получить HTTPS-сертификат, необходимо:

  1. Создать пару, состоящую из закрытого и открытого ключа и подготовить запрос на получение подписи сертификата (CSR), включающий в себя информацию об организации и публичном ключе.
  2. Обратитесь в центр сертификации и запросите HTTPS-сертификат на основе CSR.
  3. Получите заверенный HTTPS-сертификат и установите его на своем сервере.

Существует набор файлов, содержащих различные компоненты инфраструктуры открытых ключей (PKI): закрытый и открытый ключи, CSR и заверенный HTTPS-сертификат.

Существует два популярных формата для хранения информации — DER и PEM. Первый (DER) является двоичным, а второй (PEM) — base64-кодированным (текстовым) файлом DER.

По умолчанию Windows напрямую использует формат DER, а операционные системы с открытым исходным кодом (Linux и UNIX) — PEM. Существуют инструменты для преобразования одного формата в другой. Например, OpenSSL.

Файлы, которые мы будем использовать в качестве примера:

  • example.com.key — файл в формате PEM, содержит закрытый ключ. Расширение .key не является стандартным, поэтому некоторые могут его использовать, а некоторые — нет. Он должен быть защищен и доступен только администратору.
  • example.com.pub — файл в формате PEM, содержит открытый ключ.
  • example.com.csr — запрос на получение подписи сертификата. Файл в формате PEM, содержащий информацию об организации. А также публичный ключ сервера, который следует отправить в центр сертификации.
  • example.com.crt — HTTPS-сертификат, заверяется центром сертификации. Это файл в формате PEM, включающий в себя открытый ключ сервера, информацию об организации, подпись ЦС, дату начала и дату истечения срока действия и т. д. Расширение .crt не является стандартом. Другими распространенными расширениями являются .cert и .cer.

Закрытый ключ — это случайная строка определенной длины. Мы будем использовать строку длинной 2048 бита:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAm+036O2PlUQbKbSSs2ik6O6TYy6+Zsas5oAk3GioGLl1RW9N
i8kagqdnD69Et29m1vl5OIPsBoW3OWb1aBW5e3J0x9prXI1W/fpvuP9NmrHBUN4E
S17VliRpfVH3aHfPC8rKpv3GvHYOcfOmMN+HfBZlUeKJKs6c5WmSVdnZB0R4UAWu
Q30aHEBVqtrhgHqYDBokVe0/H4wmwZEIQTINWniCOFR5UphJf5nP8ljGbmPxNTnf
b/iHS/chjcjF7TGMG36e7EBoQijZEUQs5IBCeVefOnFLK5jLx+BC//X+FNzByDil
Tt+l28I/3ZN1ujhak73YFbWjjLR2tjtp+LQgNQIDAQABAoIBAEAO2KVM02wTKsWb
dZlXKEi5mrtofLhkbqvTgVE7fbOKnW8FJuqCl+2NMH31F1n03l765p4dNF4JmRhv
/+ne4vCgOPHR/cFsH4z/0d5CpHMlC7JZQ5JjR4QDOYNOpUG51smVamPoZjkOlyih
XGk/q72CxeU6F/gKIdLt6Dx03wBosIq9IAE8LwdMnioeuj18qaVg195OMeIOriIn
tpWP4eFya5rTpIFfIdHdIxyXsd6hF/LrRc9BMWTY1/uOLrpYjTf7chbdNaxhwH7k
buvKxBvCvmXmd6v/AeQQAXbUkdSnbTKDaB9B7IlUTcDJyPBJXvFS1IzzjN6vV+06
XBwHx5ECgYEAyRZLzwnA3bw8Ep9mDw8JHDQoGuQkFEMLqRdRRoZ+hxnBD9V9M0T6
HRiUFOizEVoXxf6zPtHm/T7cRD8AFqB+pA/Nv0ug6KpwUjA4Aihf5ADp0gem0DNw
YlVkCA6Bu7c9IUlE0hwF7RLB7YrryJVJit9AymmUTUUHCQTWW2yBhC8CgYEAxoHS
HGXthin5owOTNPwLwPfU2o7SybkDBKyW69uTi0KxAl3610DjyA/cV2mxIcFlPv1y
HualGd9eNoeCMBy/AUtjzI0K77yeRpjj321rj6k8c8bYWPHH539SiBXLWTY/WQ0w
pxfT3d/Z4QMh5d6p+p5f3UIrXESYQd+fAaG5tNsCgYEAksTdTB4YUT9EsWr6eN9G
jPlclFQUKV3OMvq77bfYvg8EJORz32nnDDmWS7SUjoOtemwutBlMeWbaKk25aMp3
5JNMXuV6apeMJ9Dd8GU7qBUqlIvVK31/96XPvzmnYzWZPqRVwO2HPcRFG3YcJmkg
JmZQyexJvCQ3wFNxiYUm+y0CgYBXQSMhFnCUg4jWbbDcHlnwRT+LnjHrN2arPE3O
eKLfGL6DotmqmjxFaStaRPv2MXMWgAMUsB8sQzG/WEsSaOBQaloAxJJlFIyhzXyE
bi1UZXhMD8BzQDu1dxLI/IN4wE6SDykumVuocEfuDxlsWDZxEgJjWD2E/iXK9seG
yRa+9wKBgEydVz+C1ECLI/dOWb20UC9nGQ+2dMa+3dsmvFwSJJatQv9NGaDUdxmU
hRVzWgogZ8dZ9oH8IY3U0owNRfO65VGe0sN00sQtMoweEQi0SN0J6FePiVCnl7pf
lvYBaemLrW2YI2B7zk5fTm6ng9BW/B1KfrH9Vm5wLQBchAN8Pjbu
-----END RSA PRIVATE KEY-----

Храните закрытый ключ в безопасности!

Открытый ключ выглядит примерно так:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm+036O2PlUQbKbSSs2ik
6O6TYy6+Zsas5oAk3GioGLl1RW9Ni8kagqdnD69Et29m1vl5OIPsBoW3OWb1aBW5
e3J0x9prXI1W/fpvuP9NmrHBUN4ES17VliRpfVH3aHfPC8rKpv3GvHYOcfOmMN+H
fBZlUeKJKs6c5WmSVdnZB0R4UAWuQ30aHEBVqtrhgHqYDBokVe0/H4wmwZEIQTIN
WniCOFR5UphJf5nP8ljGbmPxNTnfb/iHS/chjcjF7TGMG36e7EBoQijZEUQs5IBC
eVefOnFLK5jLx+BC//X+FNzByDilTt+l28I/3ZN1ujhak73YFbWjjLR2tjtp+LQg
NQIDAQAB
-----END PUBLIC KEY-----

Запрос на подпись сертификата (CSR) выглядит следующим образом:

-----BEGIN CERTIFICATE REQUEST-----
MIICzjCCAbYCAQAwgYgxFDASBgNVBAMMC2V4YW1wbGUuY29tMQswCQYDVQQLDAJJ
VDEPMA0GA1UECAwGTG9uZG9uMRIwEAYDVQQKDAlBQ01FIEluYy4xIDAeBgkqhkiG
9w0BCQEWEWFkbWluQGV4YW1wbGUuY29tMQswCQYDVQQGEwJHQjEPMA0GA1UEBwwG
TG9uZG9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm+036O2PlUQb
KbSSs2ik6O6TYy6+Zsas5oAk3GioGLl1RW9Ni8kagqdnD69Et29m1vl5OIPsBoW3
OWb1aBW5e3J0x9prXI1W/fpvuP9NmrHBUN4ES17VliRpfVH3aHfPC8rKpv3GvHYO
cfOmMN+HfBZlUeKJKs6c5WmSVdnZB0R4UAWuQ30aHEBVqtrhgHqYDBokVe0/H4wm
wZEIQTINWniCOFR5UphJf5nP8ljGbmPxNTnfb/iHS/chjcjF7TGMG36e7EBoQijZ
EUQs5IBCeVefOnFLK5jLx+BC//X+FNzByDilTt+l28I/3ZN1ujhak73YFbWjjLR2
tjtp+LQgNQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAGIQVhXfuWdINNfceNPm
CkAGv4yzpx88L34bhO1Dw4PYWnoS2f7ItuQA5zNk9EJhjkwK8gYspK7mPkvHDbFa
Um7lPSWsm3gjd3pU7dIaHxQ+0AW9lOw5ukiBlO4t3qgt+jTVZ3EhMbR0jDSyjTrY
kTgfuqQrGOQSmLb5XviEtCcN0rseWib3fKIl8DM69JiA2AALxyk7DCkS1BqLNChT
pnbgvtlUhc4yFXNCtwPGskXIvLsCn2LRy+qdsPM776kDLgD36hK0Wu14Lpsoa/p+
ZRuwKqTjdaV23o2aUMULyCRuITlghEEkRdJsaXadHXtNd5I5vDJOAAt46PIXcyEZ
aQY=
-----END CERTIFICATE REQUEST-----

Этот пример CSR содержит публичный ключ сервера и сведения об организации ACME Inc., расположенной в Лондоне, Великобритания, и владеющей доменным именем example.com.

Подписанный сертификат HTTPS выглядит следующим образом:

-----BEGIN CERTIFICATE-----
MIIDjjCCAnYCCQCJdR6v1+W5RzANBgkqhkiG9w0BAQUFADCBiDEUMBIGA1UEAwwL
ZXhhbXBsZS5jb20xCzAJBgNVBAsMAklUMQ8wDQYDVQQIDAZMb25kb24xEjAQBgNV
BAoMCUFDTUUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20x
CzAJBgNVBAYTAkdCMQ8wDQYDVQQHDAZMb25kb24wHhcNMTYwNDE5MTAzMjI1WhcN
MTcwNDE5MTAzMjI1WjCBiDEUMBIGA1UEAwwLZXhhbXBsZS5jb20xCzAJBgNVBAsM
AklUMQ8wDQYDVQQIDAZMb25kb24xEjAQBgNVBAoMCUFDTUUgSW5jLjEgMB4GCSqG
SIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xCzAJBgNVBAYTAkdCMQ8wDQYDVQQH
DAZMb25kb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCb7Tfo7Y+V
RBsptJKzaKTo7pNjLr5mxqzmgCTcaKgYuXVFb02LyRqCp2cPr0S3b2bW+Xk4g+wG
hbc5ZvVoFbl7cnTH2mtcjVb9+m+4/02ascFQ3gRLXtWWJGl9Ufdod88Lysqm/ca8
dg5x86Yw34d8FmVR4okqzpzlaZJV2dkHRHhQBa5DfRocQFWq2uGAepgMGiRV7T8f
jCbBkQhBMg1aeII4VHlSmEl/mc/yWMZuY/E1Od9v+IdL9yGNyMXtMYwbfp7sQGhC
KNkRRCzkgEJ5V586cUsrmMvH4EL/9f4U3MHIOKVO36Xbwj/dk3W6OFqTvdgVtaOM
tHa2O2n4tCA1AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBABwwkE7wX5gmZMRYugSS
7peSx83Oac1ikLnUDMMOU8WmqxaLTTZQeuoq5W23xWQWgcTtfjP9vfV50jFzXwat
5Ch3OQUS53d06hX5EiVrmTyDgybPVlfbq5147MBEC0ePGxG6uV+Ed+oUYX4OM/bB
XiFa4z7eamG+Md2d/A1cB54R3LH6vECLuyJrF0+sCGJJAGumJGhjcOdpvUVt5gvD
FIgT9B04VJnaBatEgWbn9x50EP4j41PNFGx/A0CCLgbTs8kZCdhE4QFMxU9T+T9t
rXgaspIi7RA4xkSE7x7B8NbvSlgP79/qUe80Z7d8Oolva6dTZduByr0CejdfhLhi
mNU=
-----END CERTIFICATE-----

Все части объединены и должны соответствовать друг другу. Окончательный сертификат был создан только для демонстрации. Это самоподписаный сертификат, поскольку он не был заверен признанным центром сертификации.

Далее мы опишем процесс переключения на протокол HTTPS в cPanel, Linux, FreeBSD и Windows. Это универсальный процесс, подходящий для всех видов сертификатов.

Шаг 1. Создайте закрытый ключ и запрос на подпись сертификата (CSR).

В следующих примерах мы будем использовать 2048-разрядные RSA-сертификаты.

cPanel

  1. Войдите в cPanel.
  2. Прокрутите страницу до раздела «Безопасность» и кликните по ссылке «SSL /TLS».

    Раздел cPanel «Безопасность»

  3. Вы находитесь в «Менеджере SSL /TLS». Нажмите кнопку «Закрытые ключи», чтобы создать новый закрытый ключ.
    Затем вы будете перенаправлены на страницу, на которой сможете создать, вставить или загрузить новый закрытый ключ. Выберите в раскрывающемся списке «Размер ключа» — «2048-бит» и нажмите кнопку «Сгенерировать».

    Раздел cPanel «Закрытый ключ»

  4. В результате будет создан новый закрытый ключ:
    Подтверждение создания закрытого ключа в cPanel
  5. Если вернетесь на страницу «Закрытые ключи», то увидите там свой новый ключ:
    Раздел cPanel «Закрытые ключи» с новым сгенерированным ключом
  6. Вернитесь в «Менеджер SSL/TLS». Нажмите на кнопку «Запросы на подпись сертификата (CSR)», чтобы создать новый запрос.
    cPanel «Менеджер SSL/TLS»
  7. В форме «Создать запрос к сервису» выберите сгенерированный закрытый ключ и заполните все необходимые поля. Ответьте на все вопросы правильно. Эти сведения будут добавлены в сертификат. По завершении нажмите кнопку «Создать».
    Форма cPanel «Создать новый запрос на подпись сертификата»
  8. В результате будет создан новый CSR, и вы получите подтверждение:
    Подтверждение CSR cPanel
  9. Если вернетесь в раздел «Запрос на подпись сертификата», то увидите, что новый CSR уже указан:
    «Запрос на подпись сертификата» в cPanel

LINUX, FREEBSD

Убедитесь, что у вас установлена библиотека OpenSSL. Это можно проверить с помощью следующей команды:

openssl version

Если OpenSSL не установлена, откройте командную строку и инсталлируйте ее:

  • Debian, Ubuntu и их клоны
    sudo apt-get install openssl
  • Red Hat, CentOS и их клоны
    sudo yum install openssl
  • FreeBSD
    make -C /usr/ports/security/openssl install clean

Затем сгенерируйте закрытый ключ и CSR с помощью одной команды:

openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

Будет создан закрытый ключ, и вам будет предложена информация для CSR:

Generating a 2048 bit RSA private key
........................+++
................................................................+++
writing new private key to 'example.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.', the field will be left blank.

Укажите только домен верхнего уровня (example.com). ЦС обычно сам добавляет субдомен www (например, www.example.com):

Country Name (2 letter code) [AU]:GB
State or Province Name (full name) [Some-State]:London
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ACME Inc.
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:admin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Internet Information Services (IIS) на Windows

  1. Перейдите в меню «Пуск» → «Администрирование» → «Менеджер служб IIS». Кликните по имени сервера. Дважды кликните по пункту «Сертификаты сервера»:
  2. Нажмите кнопку «Создать запрос сертификата», расположенную в правом столбце.
  3. Введите данные о своей организации, обратите внимание на поле «Common Name». Его значение должно соответствовать доменному имени. Нажмите «Next».
  4. Оставьте значение опции «Cryptographic Service Provider» используемое по умолчанию. Установите для «Bit length» значение 2048. Нажмите «Next».
  5. Выберите место для хранения сгенерированного CSR и нажмите «Finish».

Шаг 2: Получение HTTPS-сертификата

Сначала приобретите HTTPS-сертификат нужного типа (DV, OV, EV или wildcard) у поставщика. После этого предоставьте запрос на подпись сертификата. Вам будет предложено предоставить весь текст CSR, включая строки

—–BEGIN CERTIFICATE REQUEST—–

и

—–END CERTIFICATE REQUEST—-

Если хотите получить EV или OV сертификат, необходимо указать юридическое лицо, для которого запрашивается сертификат. Вас также могут попросить предоставить документы, удостоверяющие вас как представителя этой компании. Затем регистратор проверит ваш запрос и выдаст заверенный HTTPS-сертификат.

Пошаговая инструкция

  1. Найдите поставщика HTTPS-сертификатов.
  2. Выберите тип сертификата. Укажите наиболее удобный способ оплаты и осуществите оплату.
  3. Активируйте новый HTTPS-сертификат для своего домена. Вы можете вставить или загрузить запрос на подпись сертификата. Система извлечет данные сертификата из CSR.
  4. Вам будет предложено выбрать метод «Проверки управления доменом»: по электронной почте, путем загрузки HTML-файла (с помощью протокола HTTP) или путем добавления TXT- записи в DNS.
  5. Подождите, пока не будет выполнена проверка. Загрузите заверенный HTTPS-сертификат.

Самозаверенные сертификаты

Этот метод рекомендуется использовать для тестирования, потому что криптографически такой сертификат столь же надежен, как и любой другой. Но браузеры не будут ему доверять.

Приведенный в примере выше сертификат является самозаверенным. Его можно использовать его для домена example.com, и он будет работать на протяжении всего срока действия.

Вы можете создать самозаверенный сертификат на любой платформе, для которой доступна библиотека OpenSSL:

openssl x509 -signkey example.com.key -in example.com.csr -req -days 365 -out example.com.crt

После создания сертификата установите его на свой сервер.

Шаг 3. Установка HTTPS-сертификата для сайта.

cPanel

  1. Перейдите в раздел «Менеджер SSL /TLS». Нажмите на кнопку «Сертификаты (CRT)», чтобы импортировать новый сертификат.
  2. Вы будете перенаправлены на страницу «Вставить, загрузить или сгенерировать новый сертификат». Вставьте содержимое файла сертификата, полученного от регистратора, или загрузите его с помощью кнопки «Обзор».
  3. При добавлении содержимого HTTPS-сертификата для его подтверждения будут предоставлены текстовые значения. Просмотрите содержимое и нажмите кнопку «Сохранить сертификат».
  4. В результате HTTPS-сертификат будет сохранен:
  5. Если вы вернетесь в раздел «Сертификаты (CRT)», то увидите в нем новый HTTPS-сертификат:
  6. Вернитесь в раздел «Менеджер SSL / TLS». Нажмите кнопку «Установка и управление SSL для вашего сайта (HTTPS)», чтобы установить новый сертификат для существующего сайта.
  7. В форме «Установить SSL на сайт» нажмите кнопку «Обзор сертификатов» и выберите HTTPS-сертификат. Из раскрывающегося списка выберите домен своего сайта, заполните поля «Сертификат» и «Закрытый ключ».

Проверьте, можете ли вы получить доступ к своему сайту по адресу https://www.example.com. Если все работает нормально, можно перенаправлять трафик с HTTP на HTTPS. Для этого необходимо добавить несколько строк кода в файл .htaccess (если вы используете сервер Apache):

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Если файл .htaccess уже существует, добавьте в него только строки RewriteCond и RewriteRule сразу после директивы RewriteEngine On.

Linux, FreeBSD

Поместите сгенерированный закрытый ключ (example.com.key), запрос подписи сертификата (example.com.csr) и действительный HTTPS-сертификат (example.com.crt) в соответствующие каталоги:

  • Debian, Ubuntu и их клоны, а также FreeBSD 
    cp example.com.crt /etc/ssl/certs/
    cp example.com.key /etc/ssl/private/
    cp example.com.csr /etc/ssl/private/
  • Red Hat, CentOS и их клоны
    cp example.com.crt /etc/pki/tls/certs/
    cp example.com.key /etc/pki/tls/private/
    cp example.com.csr /etc/pki/tls/private/
    restorecon -RvF /etc/pki

    Файлы должны принадлежать пользователю root, и для них должны быть установлены права доступа 600.

  • Debian, Ubuntu и их клоны
    chown -R root. /etc/ssl/certs /etc/ssl/private
    chmod -R 0600 /etc/ssl/certs /etc/ssl/private
  • Red Hat, CentOS и их клоны
    chown -R root. /etc/pki/tls/certs /etc/pki/tls/private
    chmod -R 0600 /etc/pki/tls/certs /etc/pki/tls/private
    
  • FreeBSD 
    chown -R root:wheel /etc/ssl/certs /etc/ssl/private
    chmod -R 0600 /etc/ssl/certs /etc/ssl/private

    Apache

Чтобы включить HTTPS-версию сайта, нужно:

  • убедиться, что на сервере установлен mod_ssl;
  • загрузить полученный HTTPS-сертификат (.crt) на сервер;
  • отредактировать файлы конфигурации сервера Apache.

Начните с проверки mod_ssl. В зависимости от операционной системы используйте один из вариантов:

apache2 -M | grep ssl
or
httpd -M | grep ssl

Если mod_ssl установлен, вы должны получить подобный результат:

ssl_module (shared)
Syntax OK

Если модуль отсутствует или отключен, попробуйте следующее:

  • Debian, Ubuntu и их клоны
    sudo a2enmod ssl
    sudo service apache2 restart
  • Red Hat, CentOS и их клоны
    sudo yum install mod_ssl
    sudo service httpd restart
  • FreeBSD (выберите вариант SSL)
    make -C /usr/ports/www/apache24 config install clean
    apachectl restart

Измените файл конфигурации Apache (httpd.conf):

  • Debian, Ubuntu /etc/apache2/apache2.conf
  • Red Hat, CentOS /etc/httpd/conf/httpd.conf
  • FreeBSD /usr/local/etc/apache2x/httpd.conf
Listen          80
Listen          443

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect 301 / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    Redirect 301 / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    ...
    SSLEngine on
    SSLCertificateFile/path/to/signed_certificate_followed_by_intermediate_certs
    SSLCertificateKeyFile /path/to/private/key

    # Uncomment the following directive when using client certificate authentication
    #SSLCACertificateFile  /path/to/ca_certs_for_client_authentication

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...
</VirtualHost>

# intermediate configuration, tweak to your needs
SSLProtocol         all -SSLv3
SSLCipherSuite      ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLCompression          off
SSLSessionTickets       off

# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling                  on
SSLStaplingResponderTimeout     5
SSLStaplingReturnResponderErrors    off
SSLStaplingCache                shmcb:/var/run/ocsp(128000)

Эта конфигурация была сгенерирована с помощью Mozilla SSL Configuration Generator, упомянутого ранее. Проверьте ее правильность. Отредактируйте пути к сертификату и закрытому ключу.

В сгенерированный код были внесены некоторые изменения для обработки переадресации с HTTP на HTTPS, а также с не-www на www домен (полезно для целей SEO).

nginx

Измените файл конфигурации nginx (nginx.conf):

  • Debian, Ubuntu, Red Hat, CentOS /etc/nginx/nginx.conf
  • FreeBSD /usr/local/etc/nginx/nginx.conf
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    ssl_dhparam /path/to/dhparam.pem;

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header Strict-Transport-Security max-age=15768000;

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;

    ## verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
    resolver <IP DNS resolver>;

    ....
}

Эта конфигурация была сгенерирована с помощью Mozilla SSL Configuration Generator, упомянутого ранее. Проверьте ее правильность.

Сервис автоматически генерирует код для обработки переадресации с HTTP на HTTPS, и он включает HTTP/2 по умолчанию.

Internet Information Services (IIS) на Windows

  1. Перейдите в меню «Пуск» → «Администрирование» → «Менеджер служб IIS». Кликните по имени сервера. Дважды кликните по пункту «Сертификаты сервера»:
    Перейдите по ссылке «Полный запрос сертификата», расположенной в правом столбце.
    Выберите файл заверенного сертификата (example.com.crt), полученный от ЦС. Введите в поле «Дружественное название» значение, которое позволит идентифицировать сертификат. Поместите новый сертификат в хранилище сертификатов «Личные» (IIS 8+). Нажмите «ОК».
  2. Если все прошло успешно, в разделе «Сертификаты сервера» должен быть указан данный сертификат.
    Кликните по имени сервера. В разделе «Сайты» выберите сайт, которому нужно назначить сертификат. Нажмите в правой колонке на ссылку «Привязки».
    В окне «Привязки сайта» нажмите кнопку «Добавить».
  3. В новом окне выберите:
    • «Тип»: «https».
    • «IP-адресс»: «Все не назначенные».
    • «Порт»: «443».

    В поле «Сертификат SSL» выберите установленный HTTPS-сертификат. Нажмите «ОК».

  4. Теперь для выбранного сайта установлены и HTTP и HTTPS.

Предупреждения о смешанном контенте

Вы можете получить предупреждающий знак рядом с адресной строкой браузера. Но это не означает, что установка сертификата неверна. Убедитесь в том, что на сайте все ссылки на ресурсы (изображения, таблицы стилей, скрипты и т. д.) начинаются с https://.

Пути ко всем ресурсам следует указывать относительно корневой папки сайта (/images/image.png, /styles/style.css и т. д.) или относительно к текущему документу (../images/image.png).

После этого предупреждения о смешанном контенте должны исчезнуть, и ваш браузер должен отображать закрытый замок без восклицательного знака.

Тестирование сервера

После запуска сайта на HTTPS я настоятельно рекомендую проверить конфигурацию безопасности сервера с помощью Qualys SSL Server Test. В случае выявления ошибок он предоставит рекомендаций по их исправлению. Следуйте этим рекомендациям, чтобы оптимизировать конфигурацию безопасности своего сервера.

Обновление сертификата

Регистратор будет отправлять вам электронные письма по мере приближения окончания срока действия сертификата. Получите новый, как только вам придет первое напоминание.
Срок действия сертификата начнется с момента заверения, а истекает через год. Таким образом, будет период времени, когда будет действителен и старый, и новый сертификат.

Аннулирование сертификата

Если сервер был взломан или кто-то получил доступ к вашему закрытому ключу, нужно немедленно аннулировать свой текущий HTTPS-сертификат. Обычно этот процесс сводится к маркировке скомпрометированного сертификата как неактивного в специальной базе регистратора и последующей выдаче нового.

Let’s Encrypt

На сайте Let’s Encrypt сказано следующее:

Let’s Encrypt — это бесплатный автоматизированный центр сертификации (ЦС). Услуги сертификации предоставляются Internet Security Research Group (ISRG).

Основные принципы работы Let’s Encrypt:

Бесплатный — любой, кто владеет доменным именем, может использовать Let’s Encrypt для бесплатного получения доверенного сертификата.

Автоматизированный — программное обеспечение, работающее на серверах, может автоматически взаимодействовать с Let’s Encrypt, чтобы получить сертификат, безопасно настроить его и продлить.

Безопасный — Let’s Encrypt служит платформой для продвижения передовых методов безопасности TLS.

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

Открытый — протокол автоматической выдачи и продления опубликован как открытый стандарт, который могут принять другие.

Чтобы воспользоваться преимуществами Let’s Encrypt, нужно соответствующим образом настроить свою учетную запись хостинга или сервер.

Как это работает

Существуют различия между Let’s Encrypt и другими ЦС. Перечень основных отличий:

  • Бесплатный — зашифрованные HTTPS-сертификаты Let’s Encrypt бесплатны.
  • Автоматический — зашифрованные HTTPS-сертификаты Let’s Encrypt действительны в течение 90 дней, в отличие от обычных HTTPS-сертификатов, которые действительны в течение одного года.
  • Безопасный — HTTPS-сертификаты Let’s Encrypt выпускаются без каких-либо компромиссов по безопасности, что приводит к несовместимости со старыми и редкими платформами. Ознакомьтесь с информацией по совместимости.

Ограничения

Let’s Encrypt предоставляет только сертификаты DV. Предлагаются одно и многодоменные HTTPS-сертификаты. Для получения дополнительной информации обратитесь к Let’s Encrypt FAQ.

Автоматизированный режим работы Let’s Encrypt вводит некоторые ограничения использования сервиса. Это позволяет защитить инфраструктуру от злоупотреблений. Значения лимитов достаточно высоки, чтобы не ограничивать возможности обычных пользователей.

Старые и экзотические клиенты (до Windows XP SP3) не поддерживаются. Ознакомьте с информацией по совместимости.

Использование шифрования HTTPS от Let’s Encrypt на практике

cPanel

  1. Войдите в cPanel хостинга
  2. Прокрутите страницу до раздела «Безопасность» и выберите пункт «Let’s Encrypt для cPanel».
  3. В разделе «Let’s Encrypt для cPanel» установите флажки для обоих доменов (example.com и www.example.com) и нажмите кнопку «Выпустить несколько».
  4. Вы будете перенаправлены в форму подтверждения. Доменное имя верхнего уровня (то есть не-www) будет выбрано в качестве основного, а доменное имя с www — как псевдоним, который будет помещен в запись HTTPS-сертификата «Subject Alt Name» (SAN). Нажмите кнопку «Выпустить», чтобы продолжить. Не обновляйте страницу: первоначальная проверка может занять несколько минут.
  5. Если процесс завершится успешно, вы увидите сообщение с подтверждением. Нажмите кнопку «Вернуться назад», чтобы увидеть установленный HTTPS-сертификат.
    Вы увидите свой домен в разделе «Ваши домены с сертификатами Let’s Encrypt». Вы можете проверить данные сертификата и убедиться, что сайт открывается в браузере по адресу с префиксом https://.

Linux, FreeBSD и другие

Самый простой способ настроить Let’s Encrypt на сервере — это Certbot. Выберите используемый сервер, операционную систему и следуйте инструкциям.

Internet Information Services на Windows

Существует сразу несколько проектов создания Windows-клиента для Let’s Encrypt:

  • letencrypt-win-simple кажется самым простым в использовании.
  • Certify предоставляет графический интерфейс поверх ACMESharp.

Cloudflare

Cloudflare — это сервис, предоставляющий сеть доставки контента (CDN), услуги по обеспечению безопасности сайтов и их защиты от атак типа распределенного отказа в обслуживании (DDoS).

Он также предоставляет HTTPS-сертификат с различными вариантами подписки, в том числе и бесплатной.

CertSimple

CertSimple предоставляет только EV HTTPS-сертификаты. Этот сервис обладает теми же преимуществами, что и Let’s Encrypt. Он обеспечивает быстрый процесс подтверждения организации. Основные преимущества сервиса:

  • Упрощенная процедура подачи заявок. Не нужно устанавливать программное обеспечение или работать из командной строки. Проверка проходит в режиме реального времени.
  • Быстрое время проверки. В среднем три часа (у других занимает 7-10 дней).
  • Бесплатные переиздания на весь срок действия сертификата. Даже спустя какое-то время можно добавить домены или исправить потерянный закрытый ключ.

Несколько HTTPS сайтов на одном IP-адресе

Из-за особенностей процесса рукопожатия виртуальные хосты с одним IP-адресом являются проблемой для TLS. Они работают, если клиент включает имя домена в заголовок HTTP-запроса. Но когда используется HTTPS, квитирование TLS происходит до отправки HTTP-заголовков. Поэтому безопасный канал должен быть инициализирован и функционален, прежде чем передавать любой HTTP текст, включая заголовки.

Таким образом, сервер не знает, какой HTTPS- сертификат должен быть предоставлен подключающемуся клиенту. В результате он предоставляет первый, который находит в файле конфигурации.

Существует несколько путей решения этой проблемы: присвоение уникального IP-адреса для каждого домена с поддержкой TLS или перевод всех доменов на один сертификат. Но оба способа являются непрактичными.

Для преодоления этого ограничения было введено расширение протокола TLS под названием Server Name Indicication (SNI). Поддержка SNI в настоящее время довольно широкая, но не глобальная.

Вы можете узнать больше о запуске SNI для Apache, Nginx и IIS (8+) из соответствующей документации.

Данная публикация представляет собой перевод статьи «The Complete Guide To Switching From HTTP To HTTPS» , подготовленной дружной командой проекта Интернет-технологии.ру