Можно ли предотвратить атаку «человек посередине» при использовании самозаверяющих сертификатов?

Я не уверен, что подобный вопрос задавался раньше (я не смог найти ни одного), но можно ли защитить клиент/сервер от атаки «человек посередине»?

Я пишу клиентское приложение для связи с сервером. Связь будет основана на SSLv3. Я в порядке с самозаверяющими сертификатами сервера, но беспокоюсь о том, что кто-то другой сгенерирует такой же самозаверяющий сертификат на том же имени сервера и притворится им. Мое клиентское приложение использует библиотеку OpenSSL. [Клиент и сервер основаны на бережливости, если это имеет значение]. Могу ли я избежать такой атаки, сохранив при этом поддержку самозаверяющих сертификатов?


person Tushar Sudake    schedule 30.07.2012    source источник
comment
Если ваше приложение не должно быть совместимо с существующими клиентами/серверами, вы можете сразу перейти к TLS 1.x (максимально поддерживаемому вашими библиотеками) и пропустить SSL 3.0, если сможете.   -  person Bruno    schedule 30.07.2012
comment
@Бруно Спасибо. Пока не могу перейти на TLS. Сервер использует SSLv3.   -  person Tushar Sudake    schedule 31.07.2012


Ответы (4)


да.

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

Если вы добавите самоподписанный сертификат в клиент и не примете никаких других сертификатов, вы на самом деле так же защищены (или, можно сказать, даже в большей степени), чем сертификат, подписанный центром сертификации. .

Важные части для обеспечения безопасности SSL с центром сертификации или без него:

  • Закрытый ключ сервера (а в случае ЦС и закрытые ключи всех его корней) хранится в секрете.
  • Клиент знает сертификат сервера (или его корень ЦС).
person Joachim Isaksson    schedule 30.07.2012
comment
Похоже на возможное решение в моем случае. Таким образом, даже если «человек посередине» представляет тот же сертификат (точнее, открытый ключ), что и у моего «настоящего» сервера, он не может расшифровать данные от клиента, поскольку у него не будет «настоящего» закрытый ключ сервера, верно? - person Tushar Sudake; 31.07.2012
comment
@TusharSudake Точно, сертификат бесполезен для тех, у кого нет для него закрытого ключа. - person Joachim Isaksson; 31.07.2012
comment
Спасибо! Это именно то, что я искал - person Tushar Sudake; 01.08.2012

Вы можете жестко запрограммировать сертификат сервера и сравнить его с полученным.

Или еще лучше, создайте сертификат ЦС и сертификат сервера, подписанный ЦС. Доверьтесь ЦС на клиенте (опять же, жестко запрограммировав его в своем приложении) и подтвердите полученный сертификат сервера с помощью сертификата ЦС.

person Eugene Mayevski 'Callback    schedule 30.07.2012
comment
(Ручная настройка также может работать вместо строгого жесткого кодирования.) - person Bruno; 30.07.2012
comment
@Бруно действительно. Но это немного усложняет жизнь пользователей и поддержку, поэтому мне нравится самодельный подход CA. - person Eugene Mayevski 'Callback; 31.07.2012

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

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

person onon15    schedule 30.07.2012

Это просто! НЕЕЕЕТ!!! Не больше, чем вы могли бы предотвратить атаку «человек посередине» с помощью сертификата, выданного известным авторитетом. ›:)

person SensorVista    schedule 15.05.2021