2009-05-16 5 views
9

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

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

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

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

+0

Это окончательно хороший и актуальный вопрос. Надеюсь, это привлечет некоторое внимание. – Accipitridae

ответ

2

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

3

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

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

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


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


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

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

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

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

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

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

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

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

+0

Я не понимаю, как это отвечает на мой вопрос. Я знаю процесс, вопрос в том, почему самозапись, а не подпись? – sleske

+0

Потому что «нет подписи» не имеет смысла. Вы не можете создать сертификат без какой-либо подписи. Посмотрите спецификацию X509. –

+0

И вопрос в том, почему вы не можете сгенерировать сертификат без подписи, не так ли? :) – bdonlan

6

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

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

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

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

+0

+1 Ваш ответ очень хорошо описывает цель обычных сертификатов. Это все еще не дает веских оснований для самоподписанных сертификатов. – Accipitridae

+1

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

+4

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

2

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

+1

Итак, вопросы: если вам не нужна проверка подлинности подписывающего лица, или если вы подтвердили другими способами, что открытый ключ принадлежит определенному человеку, зачем вам серфит? В чем преимущество наличия самозаверяющего сертификата только за пару (открытый ключ, владелец)? – Accipitridae

+1

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

1

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

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

+0

Фактически, сертификат гарантирует идентификацию. Даже CA, которые предоставляют вам дешевый сертификат, каким-то образом изменят, что вы являетесь владельцем доменного имени (через автоматическую процедуру электронной почты), прежде чем предоставить вам сертификат для этого доменного имени. Идентификация необходима, потому что без нее шифрование в действительности не защищено (из-за атаки MITM).Тем не менее, я согласен с вами в том, что шифрование без идентификации должно быть доступно для всего, пока браузеры показывают, что он все еще протекает. –

1

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

1

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

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

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

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

4

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

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

1

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

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