Может ли кто-нибудь объяснить мне разницу между этими сертификатами в упрощенном виде? Я читал несколько статей, но похоже, что они выполняют одну и ту же работу, а именно шифруют множество доменов с помощью одного сертификата.
SAN (Альтернативное имя субъекта) является частью X509 сертификат spec, где в сертификате есть поле со списком альтернативных имен, которые также действительны для субъекта (в дополнение к единственному общему имени / CN). Это поле и имена с подстановочными знаками по сути являются двумя способами использования одного сертификата для нескольких имен.
SNI (Указание имени сервера) - это Расширение протокола TLS это своего рода протокол TLS, эквивалентный заголовку HTTP Host. Когда клиент отправляет это, это позволяет серверу выбрать правильный сертификат для представления клиенту без ограничения использования отдельных IP-адресов на стороне сервера (так же, как заголовок HTTP Host широко используется для простого HTTP).
Обратите внимание, что SNI - это не то, что отражено в сертификате, и на самом деле он обеспечивает нечто противоположное тому, о чем просит вопрос; это упрощает использование множества сертификатов, а не использование одного сертификата для многих вещей.
С другой стороны, это сильно зависит от ситуации, какой путь на самом деле предпочтительнее. Например, вопрос, о котором идет речь, почти наверняка не то, что вам действительно нужно, если вам нужны сертификаты для разных сущностей.
SAN означает Альтернативное имя субъекта, и это свойство сертификата x509, и SNI - это функция, которую может поддерживать клиент SSL / TLS, т.е. совершенно другая сущность.
Использование сертификата с SAN вы можете разместить несколько сайтов с поддержкой HTTPS на одном IP-адресе, даже если клиент не поддерживает SNI. В этом случае у вас есть один сертификат для всех ваших сайтов, и такой сертификат должен содержать все имена сайтов (ServerName
s или ServerAlias
es в координатах Apache, или server_name
в Nginx) как это SAN. Это подмножество устаревшего подхода, который расширил «один сайт с поддержкой HTTPS на каждый отдельный IP-адрес». В настоящее время только крупные CDN используют SAN.
С помощью SNI вы также можете разместить несколько сайтов с поддержкой HTTPS на одном IP, у вас есть отдельный сертификат x509 для каждого сайта, и ни один из них не упоминает другие имена сайтов в своих SAN свойство, но клиенты TLS (т. е. браузеры и консольные клиенты, такие как wget
или curl
) должен поддерживать SNI. Это современный подход, поскольку последняя ОС не поддерживает SNI из коробки была Windows XP с IE 6.x, если я правильно помню. В настоящее время вы можете увидеть SAN недвижимость, если вы покупаете подстановочный знак сертификат - например такой сертификат на *.example.com
будет содержать Распространенное имя из *.example.com
и SAN из example.com
.
Это смешивает две части процесса сертификации.
SAN - это альтернативное имя субъекта. Это способ создать один сертификат для нескольких доменов. Вы просто добавляете другие домены, для которых хотите получить сертификат, в поле SAN сертификата. Затем браузер примет действительность и в этих доменах.
SNI - это указание имени сервера, которое является частью SSL. Это позволяет вам размещать несколько сайтов SSL на одном IP, потому что желаемое имя сервера отправляется с подтверждением SSL, и сервер может выбрать правильный сертификат для ответа.
Вот (возможно) более понятный для человека ответ:
SNI выполняется на стороне клиента и сообщает стеку TLS: «Я хочу поговорить с сервером, имя которого [Server X]». Сервер видит эту строку [Server X] и отвечает соответствующим сертификатом. Один из практических примеров - когда один сервер должен обслуживать трафик для нескольких доменов. Это также полезно, если клиент использовал IP (чтобы избежать задержек поиска DNS), но сертификат CN не упоминает IP.
SAN - это список «также известных как» в сертификатах. Таким образом, сервер может использовать один сертификат для многих имен. К одному сертификату можно добавить несколько доменов и даже список IP-адресов.
Как видите, вещи совпадают. Выбор между одним или обоими зависит от того, где вы контролируете. Некоторые клиенты могут не распознавать имена в SAN, и единственный способ обратиться к ним - предоставить соответствующий сертификат на основе SNI. Существуют сценарии, в которых сервер предоставляет API для одного сертификата или клиент не отправляет SNI. Для этих случаев SAN - единственный выход.
Моя компания использует и то, и другое. Они обеспечивают гибкость и упрощают обратную и прямую совместимость.