Почему сертификаты SSL/TLS самоподписываются, если у них нет реальной подписи/CA?

Если вы группируете по message_token, вы присоединитесь ко всем этим сообщениям, вам нужно будет выбрать этот шаг сообщения в инструкции where, где message_token = XXX.

SELECT 
    `chat_messages`.`id`, 
    `chat_messages`.`message`, 
    `chat_messages`.`created_at` 
FROM 
    `chat_messages`
WHERE 
    `chat_messages`.`is_group` = 0 
    and `chat_messages`.`deleted_at` is null 
    and (`sender_id` =141 or `client_id` = 141)
    and `chat_messages`.`message_token`= "146_141"
ORDER BY 
    `chat_messages`.`created_at` desc, 
    `chat_messages`.`id` desc

10
задан Flow 20 February 2019 в 21:49
поделиться

8 ответов

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

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

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

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

6
ответ дан 3 December 2019 в 18:35
поделиться

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

2
ответ дан 3 December 2019 в 18:35
поделиться

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

2
ответ дан 3 December 2019 в 18:35
поделиться

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

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

1
ответ дан 3 December 2019 в 18:35
поделиться

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

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

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


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


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

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

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

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

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

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

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

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

вы можете убедиться, что он был выдан кем-то, у кого была другая сторона соответствующего ключа.

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

вы можете убедиться, что он был выдан кем-то, у кого была другая сторона соответствующего ключа.

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

3
ответ дан 3 December 2019 в 18:35
поделиться

Certificate contains the server's public key. Self-signature is a proof that whoever generated the certificate also posseses the private key.

1
ответ дан 3 December 2019 в 18:35
поделиться

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

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

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

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

1
ответ дан 3 December 2019 в 18:35
поделиться

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

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

4
ответ дан 3 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: