SSL-сертификаты

Как с помощью произвольных строк работает безопасность в интернете.

Время чтения: 9 мин

Кратко

Секция статьи "Кратко"

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

SSL-сертификат — это набор информации в бумажном или электронном виде, состоящий из:

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

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

Как понять

Секция статьи "Как понять"

С 2014 года компания Google в числе прочих стала активно продвигать стратегию использования сертификатов безопасности сайтов. Основной целью использования сертификатов является безопасность пользователей при передаче чувствительных данных. В качестве побочного эффекта можно отметить повышение доверия к сайту, поскольку для установки сертификата владелец должен подтвердить владение доменом. С июля 2018 года Google рекомендации перевёл в разряд требований. Google Chrome по умолчанию стал блокировать переход на сайт, на котором не установлен SSL-сертификат. После этого многие браузеры поступили таким же образом.

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

Сертификат открытого ключа может быть получен несколькими способами:

  • Через специальный авторизованный удостоверяющий центр (центр сертификации), которому пользователь сайта может доверять. Это самый распространённый вариант работы сайта в режиме коммерческого использования. Обычно сертификат выдаётся на какой-то срок, в течение которого удостоверяющий центр ручается за владельца сайта перед пользователем.
  • Генерация сертификата самим пользователем с помощью специализированных программ. Такие сертификаты часто используются для настройки или для работы внутренних сервисов компаний. В этом случае издатель сертификата совпадает с владельцем сайта.
  • Генерация фиктивного сертификата с помощью специализированных программ. Этот способ используется для настройки инфраструктуры проекта. Сертификат в этом варианте содержит фиктивную информацию, однако отлично подходит для тестирования.

Рассмотрим схему обмена данными двух сторон A и B с помощью SSL-сертификата. Принимается, что обе стороны доверяют третьей стороне T, которая соответствует центру сертификации. У сторон A и T есть по паре ключей. Каждая пара состоит из открытого и закрытого ключа.

Сторона A пересылает стороне T свой открытый ключ. Сторона T с помощью определённых механизмов устанавливает соответствие между открытым ключом стороны A и самой стороной A (физическое или юридическое лицо). После этого сторона T пересылает стороне A сертификат, который содержит:

  • Открытый ключ стороны A.
  • Информацию о стороне A, которая позволяет её идентифицировать.
  • Информацию о стороне T, которая позволяет её идентифицировать.
  • Электронную подпись стороны T (хэш-сумму), которая генерируется по содержимому сертификата и затем зашифровывается с использованием закрытого ключа стороны T.
  • Другие данные.

Когда сторона A пересылает стороне B свой сертификат, сторона B сравнивает сгенерированную хэш-сумму на основе содержимого сертификата и хэш-сумму, которая получается при расшифровке электронной подписи стороны T с помощью открытого ключа. Если хэш-суммы совпадают, то открытый ключ стороны A действительно принадлежит именно ей. После этого сторона B может шифровать данные с использованием открытого ключа стороны A и пересылать ей эти данные в зашифрованном виде. И только сторона A может расшифровать их.

Такая схема является самой простой при использовании протокола транспортного уровня TLS.

Как начать

Секция статьи "Как начать"

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

Удостоверяющие центры

Секция статьи "Удостоверяющие центры"

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

Можно выбирать любой понравившийся центр, но нужно принимать во внимание несколько факторов:

  • Юрисдикция, в рамках которой центр действует. Есть множество центров сертификации, которые действуют внутри одного региона или страны. Для сайтов этого, как правило, оказывается мало.
  • Цена за услуги (изготовление сертификатов, обслуживание, продление). Платить можно и за бренд, но чаще всего в этом нет никакого практического смысла.
  • Насколько долго работает центр на рынке подобных услуг.
  • Отзывы клиентов центра. Сюда же относится и репутация. Есть несколько международных организаций, которые могут поддержать доверие к центру включением в специальный список доверенных. Аккредитация может быть произведена и контролирующим органом внутри страны, в юридическом поле которой действует компания.

Для некоммерческих проектов можно получить бесплатный сертификат для сайта с помощью центра сертификации Let's Encrypt.

Какие бывают сертификаты

Секция статьи "Какие бывают сертификаты"

Электронная форма сертификата определяется стандартом X.509. На уровне законодательства во многих странах есть свои законы или правила, которые повторяют, дополняют или уточняют детали этого стандарта. В области веб-приложений, в частности, используется стандарт RFC.5280. В нём описаны процедуры создания и отзыва сертификатов, которым должны следовать центры сертификации.

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

Например, авторитетная американская компания VeriSign предложила такую классификацию:

  • Class 1 — индивидуальные, для идентификации электронной почты.
  • Class 2 — для организаций.
  • Class 3 — для серверов и программного обеспечения.
  • Class 4 — для онлайн-бизнеса и транзакций между компаниями.
  • Class 5 — для частных компаний или правительственной безопасности.

В России больше прижилась схема всего из трёх классов:

  • SSL-сертификаты начального уровня для физических лиц.
  • SSL-сертификаты бизнес-класса для юридических лиц.
  • SSL-сертификаты с расширенной проверкой для юридических лиц.

Согласно этой классификации для физических лиц доступны:

  • Проверка принадлежности домена физическому лицу.
  • Шифрование передачи данных со стороны пользователя сайта.
  • Доступ к внутренним ресурсам компании.
  • Доступ к закрытой (административной) части сайта и системам аналитики.

Среди сертификатов начального уровня чаще всего пользуются следующими решениями от компаний GlobalSign, Comodo и других:

  • GlobalSign AlphaSSL (Wildcard).
  • GlobalSign DomainSSL (Wildcard).
  • Comodo SSL Wildcard (Wildcard).
  • Comodo SSL.
  • Easy Trust SSL от TrustWave.
  • QuickSSL premium от GeoTrust.
  • Thawte SSL123.

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

DomainSSL, AlphaSSL, OrganizationSSL и Comodo SSL — наиболее популярные сертификаты. При этом сертификаты имеют наименьший уровень доверия. Это дёшево и сердито. Практически никто из пользователей сайта никогда не задумается о том, какой сертификат используется.

Если важен уровень доверия, то можно использовать сертификаты бизнес-класса или сертификаты с расширенной проверкой. Этот вариант подходит очень крупным компаниям. У таких сертификатов есть множество дополнительных опций, нужных только крупному бизнесу. К сертификатам бизнес-класса относятся:

  • GlobalSign OrganizationSSL (Wildcard).
  • Comodo Premium SSL Wildcard (Wildcard).
  • Comodo InstantSSL Premium.
  • Comodo Premium SSL.
  • GeoTrust True BusinessID.
  • GeoTrust True BusinessID Wildcard (Wildcard).
  • TrustWave Premium SSL.
  • TrustWave Premium SSL Wildcard (Wildcard).
  • Symantec (VeriSign) SecureSite SSL.
  • Thawte SSL Webserver.
  • Thawte SSL Wildcard (Wildcard).

А к сертификатам с расширенной проверкой подлинности относятся:

  • GlobalSign ExtendedSSL.
  • Symantec (VeriSign) SecureSite EV SSL.
  • Symantec (VeriSign) SecureSite Pro EV SSL.
  • Comodo SSL EV.
  • Thawte SSL Webserver EV.
  • TrustWave Premium SSL EV.
  • GeoTrust True BusinessID EV.

Выше приведены лишь самые распространённые сертификаты, которые активно используются в мире. Есть сертификаты, которые можно оформить только на юридическое лицо, а бывают те, которые допускают использование и физическими лицами.

На практике

Секция статьи "На практике"

igsekor

Секция статьи "igsekor"

Использование самоподписанных сертификатов

Секция статьи "Использование самоподписанных сертификатов"

С развитием международного сообщества программистов приложения с открытым исходным кодом для многих сфер стали хорошим решением. В области применения сертификатов безопасности решение тоже не заставило себя ждать. Была создана полноценная криптографическая библиотека OpenSSL, которая позволяет не только реализовать поддержку протокола HTTPS в большинстве популярных браузеров, но и использовать самоподписанные сертификаты безопасности как для личных, так и для коммерческих проектов.

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

Создать ключ для генерации SSL-сертификата можно командой:

        
          
          openssl genrsa -des3 -out example.com.key 2048
          openssl genrsa -des3 -out example.com.key 2048

        
        
          
        
      

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

        
          
          openssl req -new -key example.com.key -out example.com.csr
          openssl req -new -key example.com.key -out example.com.csr

        
        
          
        
      

Файл example.com.csr, полученный после выполнения команды, и будет сертификатом, который надо будет установить на сервере в случае настройки безопасного доступа к сайту.

После генерации сертификата его содержимое можно прочитать в красивом виде с помощью команды:

        
          
          openssl req -noout -text -in example.com.csr
          openssl req -noout -text -in example.com.csr

        
        
          
        
      

Полный список команд можно посмотреть в официальной документации.