Возможно ли в SSL рукопожатие, когда клиент только отправляет свой сертификат (односторонняя аутентификация).Серверу не нужно отправлять какие-либо сертификаты? - PullRequest
0 голосов
/ 28 мая 2018

Возможно ли при рукопожатии SSL / TLS, когда клиент только отправляет свой сертификат.Серверу не нужно отправлять какие-либо сертификаты? На данный момент одним способом только сервер рукопожатия отправляет свой сертификат клиенту.Поскольку я знаю, что в этом сценарии сервер должен поддерживать корневой сертификат всех клиентов (если он отличается). Это не практично. Если это возможно, то каковы проблемы безопасности.

Вот контекст в разделе Использование SSL с программированием сокетов в C # или C ++. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Да, можно использовать SSL / TLS без сертификата сервера.См. https://security.stackexchange.com/questions/38589/can-https-server-configured-without-a-server-certificate

Вам необходимо программное обеспечение, которое поддерживает хотя бы один из наборов анонимных шифров SSL / TLS поддерживает , например TLS_DH_anon_WITH_AES_128_CBC_SHA256.Согласно вики-записи OpenSSL Диффи-Хеллмана :

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

Вы не должны использовать Anonymous Diffie-Hellman.Вы можете запретить его использование в своем коде, используя "! ADH" при вызове SSL_set_cipher_list.

Обратите внимание, что поддержка таких наборов шифров и конфигураций в большинстве доступных программ SSL / TLS либо не- существует или очень ограничен, так как такие конфигурации уязвимы для атак «человек посередине» - одна из тех вещей, которые используются для предотвращения SSL / TLS.Например, вам придется скомпилировать свой собственный код OpenSSL.

Если вы не управляете программным обеспечением на обоих концах вашего (-ых) канала (-ов) связи, то, по сути, нет способа реализовать такую ​​систему.

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

Но вы можете сделать это с большим усилием.

0 голосов
/ 29 мая 2018

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

Сервер, если пожелает, может запросить у клиента сертификат.Это для аутентификации клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...