Всякий раз, когда я пытаюсь что-то понять о SSL, мне всегда трудно отследить, что означают «ключ» и «сертификат». Боюсь, что многие люди используют их неправильно или взаимозаменяемо. Есть ли стандартная разница между ключом и сертификатом?
Всякий раз, когда я пытаюсь что-то понять о SSL, мне всегда трудно отследить, что означают «ключ» и «сертификат». Боюсь, что многие люди используют их неправильно или взаимозаменяемо. Есть ли стандартная разница между ключом и сертификатом?
Ответы:
Сертификат содержит открытый ключ.
Сертификат, помимо того, что содержит открытый ключ, содержит дополнительную информацию, такую как издатель, для чего предполагается использовать сертификат, и другие типы метаданных.
Как правило, сертификат сам подписывается центром сертификации (ЦС) с использованием закрытого ключа ЦС. Это проверяет подлинность сертификата.
openssl
Команда может декодировать и проанализируйте их, или вы можете использовать онлайн-утилиту, такую как эта: lapo.it/asn1js
Допустим, компания A имеет пару ключей и должна опубликовать свой открытый ключ для публичного использования (он же ssl на своем веб-сайте).
Таким образом, открытый ключ компании A, подписанный действительным секретным ключом CA, называется сертификатом компании A.
Позвольте мне объяснить на примере.
В обычной PKI на основе пар ключей есть закрытый ключ и открытый ключ.
В системе на основе сертификатов есть закрытый ключ и сертификат. Сертификат содержит больше информации, чем открытый ключ.
Демонстрация (Вы можете создать сертификат и закрытый ключ): http://www.selfsignedcertificate.com/
Вы можете скачать открыть файл закрытого ключа и файл сертификата, вы видите, что файл сертификата содержит много информации, как показано ниже.
Вы можете сопоставить свой сгенерированный сертификат (открытие текстовым редактором) и закрытый ключ (открытие текстовым редактором) с этого сайта: https://www.sslshopper.com/certificate-key-matcher.html
Если сертификат соответствует личному ключу клиента, клиент уверен, что сертификат выдан клиентом или доверенным агентом клиента (CA).
Однако существуют проблемы только в связи с закрытым ключом и сертификатом .
Потому что любой может сгенерировать свой собственный сертификат и закрытый ключ, поэтому простое рукопожатие ничего не доказывает о сервере, кроме того, что сервер знает закрытый ключ, который соответствует открытому ключу сертификата. Одним из способов решения этой проблемы является предоставление клиенту набора из одного или нескольких сертификатов, которым он доверяет. Если сертификат не указан, серверу нельзя доверять .
У этого простого подхода есть несколько недостатков. Серверы должны иметь возможность обновляться до более надежных ключей с течением времени («ротация ключей»), что заменяет открытый ключ в сертификате новым. К сожалению, теперь клиентское приложение должно быть обновлено из-за изменения конфигурации сервера. Это особенно проблематично, если сервер не находится под контролем разработчика приложения, например, если это сторонний веб-сервис. Этот подход также имеет проблемы, если приложение должно общаться с произвольными серверами, такими как веб-браузер или приложение электронной почты.
Чтобы устранить эти недостатки, серверы обычно настраиваются с помощью сертификатов от известных издателей, называемых центрами сертификации (CA). хост-платформа (клиент) обычно содержит список известных CA, которым она доверяет. Подобно серверу, CA имеет сертификат и закрытый ключ. При выдаче сертификата для сервера CA подписывает сертификат сервера, используя свой закрытый ключ. Затем клиент может проверить, что на сервере есть сертификат, выданный центром сертификации, известным платформе.
Тем не менее, при решении некоторых проблем использование CA вводит другую. Поскольку центр сертификации выдает сертификаты для многих серверов, вам все равно нужен какой-то способ убедиться, что вы общаетесь с нужным сервером. Чтобы решить эту проблему, сертификат, выданный ЦС, идентифицирует сервер либо с определенным именем, таким как gmail.com, либо с набором подстановочных знаков, например * .google.com.
Следующий пример сделает эти концепции немного более конкретными. В приведенном ниже фрагменте командной строки команда s_client инструмента openssl просматривает информацию о сертификатах сервера Википедии. Он указывает порт 443, потому что это по умолчанию для HTTPS. Команда отправляет выходные данные openssl s_client в openssl x509, который форматирует информацию о сертификатах в соответствии со стандартом X.509. В частности, команда запрашивает субъект, который содержит информацию об имени сервера, и издателя, который идентифицирует CA.
$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA
Вы можете видеть, что сертификат был выдан для серверов, соответствующих * .wikipedia.org, RapidSSL CA.
Как видите, благодаря этой дополнительной информации, отправляемой ЦС на серверы, клиент может легко узнать, взаимодействует ли он со своим сервером или нет.
Сертификат SSL получен от доверенного центра сертификации, который гарантирует безопасное подключение к веб-сайту. Сертификаты SSL обычно содержат логотип аутентификации, а также открытые ключи, необходимые для шифрования и дешифрования данных, которые должны быть отправлены на компьютер. Функции ключей SSL
Несколько ключей SSL могут быть сгенерированы во время сеанса. Они используются для шифрования и дешифрования информации, отправляемой на компьютер и с компьютера. Ключи используются для проверки того, что информация не была изменена или подделана.
Разница в жизненном цикле
Сертификаты действуют дольше, чем ключи SSL. Сертификаты SSL получены от Удостоверяющего центра, который может регулярно обновляться банками и предприятиями. Ключи SSL или ключи сеанса, с другой стороны, уникальным образом генерируются во время сеанса и отбрасываются по окончании сеанса.
Хорошо, давайте разберемся с этим, чтобы не технические люди могли понять.
Думайте об этом так. Сертификат - это как сейф в вашем банке. Он содержит много важных вещей; как правило, вещи, которые содержат вашу личность. Сертификат имеет открытый ключ, и для его открытия необходим закрытый ключ.
Ваш сейф также открывает два ключа, как и сертификат.
В банковской ячейке ключ банка похож на открытый ключ, поскольку он остается в банке, а открытый ключ остается с сертификатом. У вас есть личный ключ, который необходим для «получения вашего сертификата», и в примере с сейфом ваш личный ключ необходим в дополнение к открытому ключу.
Прежде чем вы действительно сможете открыть свой сейф, вы должны сначала подтвердить свою личность (например, запрос на сертификат); как только вы были идентифицированы, вы используете свой закрытый ключ вместе с открытым ключом, чтобы открыть свой сейф. Это немного похоже на запрос вашего сертификата, а затем на получение сертификата от центра сертификации (если вы можете быть идентифицированы (доверены) и у вас есть правильный ключ).