Я столкнулся со случаем, когда клиент требует, чтобы я реализовал «взаимную аутентификацию» путем обмена общедоступными сертификатами x509 друг друга. Это слышно?
Я считаю, что это все еще называется взаимной аутентификацией.
Как правило, взаимная аутентификация на основе сертификатов относится к одной из двух моделей. Первая — это корпоративная модель с иерархией ЦС, и ЦС организации подписывает как клиентский, так и серверный сертификат.
Вторая модель — это клиенты, использующие самозаверяющие сертификаты в том, что называется Origin. Привязанные сертификаты. Он называется Origin Bound, потому что каждый сайт (источник), которому нужен сертификат, получает его от клиента. Сертификаты, привязанные к источнику, являются основой протокола привязки токена IETF.
Мне не ясно, имеет ли привязка токена те же свойства безопасности, что и сертификаты, привязанные к источнику. Видите ли, мы можем использовать сертификаты, привязанные к источнику, чтобы предотвратить атаки «человек посередине», сделав аутентификацию частью настройки канала. Привязка токена отделяет привязку и перемещает ее вверх по стеку. Я считаю, что это позволяет MitM выступать в качестве посредника.
Сертификаты предприятия
В корпоративной модели вот что вы делаете с OpenSSL.
На сервере выполните следующее. Сервер будет обрабатывать проверку сертификата клиента:
- Позвоните
SSL_CTX_set_verify
с помощью SSL_VERIFY_PEER
и SSL_VERIFY_FAIL_IF_NO_PEER_CERT
.
- Вызовите
CTX_set_client_CA_list
, чтобы установить список ЦС издателя, который будет принимать сервер. Это приводит к отправке соответствующего сообщения SSL/TLS клиенту с запросом сертификата. Это только отправляет список имен клиенту; им все еще нужно доверять на сервере
- Позвоните
SSL_CTX_load_verify_locations
с эмитентами, которых принимает сервер. Это добавляет доверия на стороне сервера.
На клиенте выполните следующее:
- Вызовите
SSL_CTX_use_certificate_file
, чтобы загрузить сертификат клиента
- Звоните
SSL_CTX_use_certificate_chain_file
по мере необходимости
- Позвоните
SSL_CTX_use_PrivateKey
, чтобы загрузить закрытый ключ
Привязанные сертификаты происхождения
Привязанные к происхождению и самозаверяющие сертификаты немного отличаются, потому что нет иерархии ЦС.
На сервере выполните следующее. Сервер не вызывает SSL_CTX_load_verify_locations
или CTX_set_client_CA_list
, потому что это самозаверяющий сертификат.
- Позвоните
SSL_CTX_set_verify
с помощью SSL_VERIFY_PEER
и SSL_VERIFY_FAIL_IF_NO_PEER_CERT
.
- Позвоните
SSL_get_peer_certificate
после обмена ключами. Проверьте сертификат клиента, представленный серверу.
На клиенте выполните следующее. Это то же самое, что и корпоративная модель.
- Вызовите
SSL_CTX_use_certificate_file
, чтобы загрузить сертификат клиента
- Звоните
SSL_CTX_use_certificate_chain_file
по мере необходимости
- Позвоните
SSL_CTX_use_PrivateKey
, чтобы загрузить закрытый ключ
Отсутствие центра сертификации предприятия означает, что самозаверяющий сертификат клиента должен передаваться на сервер вне диапазона. Затем на сервере должен быть какой-то каталог для поиска клиентских сертификатов на основе отличительных имен и серийных номеров. Здесь вас действительно интересует открытый ключ клиента. В этом случае сертификат X509 является деталью представления. Это просто упаковка, потому что обычно она связывает личность с открытым ключом через подпись уполномоченного органа (но не в этой модели).
Атака в этой модели — 500-фунтовая горилла в комнате — это злоумышленник, выдающий себя за пользователя, используя то же отличительное имя и серийный номер, потому что отсутствует центр регистрации (RA). Вам потребуются некоторые меры, чтобы гарантировать, что вас не обманут, например, отправка электронного письма пользователю, чтобы подтвердить, что ожидаются изменения его открытого ключа.
Атака означает, что когда вы регистрируете пользователя, вам нужны три или четыре вещи:
- Уникальная пара {Отличительное имя, серийный номер
- Открытый ключ (часть сертификата X509)
- Адрес электронной почты для подтверждения/восстановления
Чтобы еще больше замутить ситуацию, у пользователя может быть 3 или 4 устройства, поэтому он создает новый сертификат происхождения для каждого устройства. Вам также нужно будет изящно справиться с этой регистрацией.
Если взять все вместе, то действительно имеет значение адрес электронной почты и различные открытые ключи/идентификаторы, связанные с адресом электронной почты. Удостоверения хранятся в сертификате X509 с уникальной парой {Отличительное имя, серийный номер. Вы, вероятно, хотите, чтобы они были уникальными для целей аудита, но, вероятно, между устройствами будет происходить копирование/вставка.
Я изо всех сил пытаюсь найти какую-либо документацию или информацию об этом с помощью openssl.
Вероятно, у вас возникли проблемы с поиском информации, потому что это проблема более высокого уровня, архитектуры безопасности и дизайна. Чтобы помочь с некоторыми ссылками, начните с чтения Сертификаты, привязанные к происхождению: новый подход к надежной аутентификации клиентов в Интернете. Также посетите Engineering Security Питера Гутмана и Инженерия безопасности.
Привязанные сертификаты происхождения можно использовать для замены почти любой системы аутентификации на основе пароля. Это применимо почти ко всем системам, от аутентификации на основе имени пользователя/пароля до ключей API, используемых в веб-сервисах. Пароль по-прежнему используется для защиты локального закрытого ключа, но пароль не передается по сети.
Когда уровни конфиденциальности данных требуют более строгих мер безопасности, клиентские сертификаты — это одно из первых средств, к которым мы обращаемся, чтобы предотвратить неправильное обращение с паролем и неэффективные средства проверки подлинности и авторизации. Не покупайтесь на использование и обработку паролей Apple, Microsoft, Google (и др.). Он был дефектным в течение многих лет. Это просто компании, которые упрощают работу пользователей, чтобы они могли захватить бизнес.
person
jww
schedule
05.05.2016