Зачем мне проверять подлинность клиента с помощью сертификата?
Я реализую клиент с скрученным python, который проверяет сертификат ssl сервера при подключении, следуя в основном этот рецепт. Я видел во многих HOWTO, таких как сервер проверки подлинности клиента с помощью сертификата ssl. В настоящее время я аутентифицирую своих клиентов с использованием уникальной строки id и 1024 char (они являются автоматизированными клиентами без взаимодействия с человеком).
То, что я не понимаю, является причиной того, что я должен использовать всю вещь ssl для этого, а не просто отправить "пароль" на сервер. Ведь соединение уже зашифровано ssl, проверяя сертификат сервера и все такое. Этот вопрос - это аналогичный вопрос, но я хочу знать, почему люди используют сертификаты клиентов ssl, а не только то, что это лучший способ сделать это.
Ответы
Ответ 1
Сертификат клиента ограничивает доступ к людям, уполномоченным сертификатами. Предполагая, что ваши сертификаты распределены и управляются правильно, это затрудняет подключение из неавторизованного местоположения (или, скажем, бот-сети), поскольку вам нужно больше, чем просто имя пользователя и пароль.
Сертификаты на стороне клиента представляют собой потенциальную часть стратегии защиты в глубину, , если вы находитесь в среде, где вы можете управлять клиентскими сертификатами.
Ответ 2
Сертификаты легко отменить. Пароли можно украсть, но украсть сертификат на стороне клиента будет намного сложнее.
Ответ 3
Использование взаимной аутентификации на основе сертификата клиента предотвращает, по меньшей мере, следующие атаки/проблемы:
- Фишинг пароля
- Ключ регистрации пароля
- Плечо, просматривающее пароль
- Угадай пароль
- Повторное использование паролей для нескольких служб
Кроме того, использование клиентских сертификатов дает возможность хранить клиентский сертификат (и соответствующий закрытый ключ) на смарт-карте, токене USB или другом аппаратном модуле безопасности (HSM), тем самым переходя от "то, что вы знаете" (пароль) к "то, что у вас есть физически" (токен, карта) плюс "что-то, что вы знаете" (ПИН). Это также называется двухфакторной аутентификацией.
В вашем конкретном случае использования паролей в качестве разделяемых ключей в технической линии связи системы с системой использование сертификатов имеет два преимущества:
- масштабируется лучше: с общими ключами каждый node должен делиться другим ключом/паролем друг с другом node, в результате чего (n-1)! пароли, в то время как с сертификатами, каждому node нужен только один сертификат и закрытый ключ (n сертификатов плюс CA)
- возможность хранения ключа на HSM и тем самым предотвратить его копирование/кражу в цифровом виде.
Ответ 4
Основным преимуществом проверки подлинности на стороне клиента (т.е. когда сервер проверяет сертификат клиента) является то, что если сервер становится скомпрометированным, секретный ключ клиента, который является закрытым ключом для сертификата, не будет скомпрометирован. Если клиент использует учетные данные, они могут быть скомпрометированы вместе с сервером.
Ответ 5
Проверка сертификата гарантирует, что вы подключаетесь к тому, с кем вы собираетесь подключаться. Он предотвращает нападение "человек в середине".
См. http://www.thoughtcrime.org/software/sslsniff/ для связанного случая, когда клиенты неправильно проверяли цепочку сертификатов, что привело к довольно простому использованию SSL используя атаку "человек-в-середине".
Ответ 6
Владение сертификатами SSL, подписанными центром сертификации, означает, что владельцы сертификатов SSL прошли проверку на то, что CA подтвердил, что владелец является тем, кем они себя называют. Например, если у вас есть магазин электронной торговли под названием widgetsdeluxe.com, и у вас есть сертификат для домена widgetsdeluxe.com, который был подписан Verisign и др. Al., Покупатели будут знать, что, когда они перейдут на этот сайт, и имя в сертификате совпадает с фактическим именем домена, к которому они пошли, тогда они могут доверять тому, что информация защищена и поступает из домена widgetsdeluxe.com(это для предотвращать спуфинг и атаки "человек-в-середине" ).