Почему сертификаты SSL / TLS самозаверяющие, если у них нет реальной подписи / CA? - PullRequest
10 голосов
/ 16 мая 2009

Я понимаю, что обычно сертификат SSL (или, точнее, X.509) должен быть подписан неким сертифицирующим органом, чтобы гарантировать его подлинность.

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

Мой вопрос: зачем использовать эту странную конструкцию самоподписания? Почему сертификат не может просто не иметь подписи? Что включает в себя получение самоподписанной подписи?

Или это просто потому, что технически проще (без особого случая без подписи) всегда иметь подпись в каждом сертификате, даже если это бессмысленная подпись?

Ответы [ 9 ]

6 голосов
/ 16 мая 2009

Сертификат состоит из трех основных частей

  1. идентификационные данные
  2. открытый ключ
  3. цифровая подпись

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

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

4 голосов
/ 05 сентября 2009

Если вы подписываете сертификат самостоятельно, это доказывает, что вы действительно контролируете секретный ключ этой подписи, т. Е. Это ваш сертификат.

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

3 голосов
/ 16 мая 2009

Представьте, что вы создаете свой собственный центр сертификации, самый первый: кто подписывает ваш сертификат?

Чтобы понять весь процесс сертификации, нужно представить его как цепочку последствий: вам выдан сертификат. Стоит ли доверять этому? Либо вы можете доверять эмитенту, либо вы смотрите на сертификат и соглашаетесь с тем, что доверяете подписавшему. Если вы не знаете подписавшего, вы можете отправить его обратно подписавшему ТО и так далее. В конце концов, однако, вы получите самоподписанный сертификат.

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


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


Хорошо, давайте зададим еще несколько вопросов:

  • Почему номер социального страхования состоит из 9 цифр? Почему вы не можете иметь 5-значный номер социального страхования?
  • Почему почтовый адрес имеет этот глупый почтовый индекс?
  • Неужели нам нужно оставить имя и фамилию человека?

Давайте попробуем еще раз. Что такое сертификат? Это структура данных, которая связывает имя с открытой стороной асимметричного ключа шифрования. Эта структура является «подписанной», что означает, что вы можете определить, была ли она изменена кем-либо, кроме владельца ключа подписи. Поскольку вы можете проверить эту подпись, у вас есть степень доверия к подлинности сертификата. Таким образом, действительный сертификат должен иметь проверяемую подпись.

«Доверие» в этом контексте означает, что вы готовы рискнуть, не выполнив то, за что несете ответственность, под чьим-либо авторитетом. Если у вас есть сертификат, который подписан известным CA, таким как Verisign, то лицом, которому вы доверяете, является Verisign; вы используете сертификат, полученный от них каким-либо заслуживающим доверия способом, чтобы убедиться, что они подписали рассматриваемый вами сертификат.

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

Итак, теперь рассмотрим сертификат без подписи. (Технически это называется «элемент данных».) Может содержать связь между именем и открытым ключом, но без подписи вы не можете быть уверены, что он не был изменен третьей участник.

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

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

2 голосов
/ 16 мая 2009

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

2 голосов
/ 16 мая 2009

Я полагаю, что это означает, что вы не можете «лгать» с сертификатами - то есть вы не можете создать сертификат, если с ним не согласен владелец закрытого ключа. Это обеспечивается либо тем, что ЦС проверяет, является ли объект, названный сертификатом, владельцем частного ключа, либо в случае самоподписания, когда владелец ключа подписывает сам сертификат.

1 голос
/ 04 февраля 2011

Целью сертификата является проверка личности. Лицо, подписавшее сертификат, утверждает, что все получатели сертификата проверили подлинность идентификационной информации и ее связь с открытым ключом, содержащимся в сертификате. Если сертификат не подписан, то нет подтверждения личности и, следовательно, нет причин использовать сертификат. В таком случае вы можете использовать шифр, который не требует аутентификации и, следовательно, не требует строго идентификационной информации. Я думаю, что RC4 подходит под это описание.

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

1 голос
/ 16 мая 2009

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

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

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

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

1 голос
/ 16 мая 2009

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

1 голос
/ 16 мая 2009

Разница между ними заключается в том, кто запускал программу для генерации сертификата. Какая-то большая корпорация или Джо в его гостиной. Весь бизнес с «подписанным сертификатом» - нонсенс. Сертификат позволяет вам шифровать данные, но крупные компании, которым есть, что продать, заставят вас поверить, что это означает надежность и идентичность. Шифрование не гарантирует идентичность и, что еще более важно, то, что вы можете доверять создателю. Даже если предположить, что у них 100% добрые намерения, просто посмотрите в новостях. У скольких крупных корпораций были утечки данных в этом году?

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

...