1

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

Для этого процесса я сейчас использую SSL с положительным сертификатом в качестве клиентского сертификата. Когда я выполняю TLS-вызовы, сервер Evnthough запрашивает сертификат, а клиент его не отправляет. И когда я проверял SChannel Log, я вижу предупреждение, подобное этому

Удаленный сервер запросил аутентификацию клиента TLS, но не удалось найти подходящий сертификат клиента. Будет предпринята попытка анонимного подключения. Этот запрос на соединение TLS может быть успешным или неуспешным, в зависимости от настроек политики сервера.

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

1 ответ1

2

Это зависит. Сертификаты X.509v3 обычно поставляются с полем расширения "Расширенное использование ключа", которое содержит список разрешенных вариантов использования (EKU).

  • Обычные сертификаты веб- сервера содержат использование "TLS Server Authentication" (иногда отображается как "TLS Web Server", но на самом деле оно вообще не относится к Web).

  • Чтобы действовать в качестве клиента, вам необходим сертификат с "Аутентификацией клиента TLS" (опять же часто обозначаемый как «Веб-клиент TLS», несмотря на то, что в нем нет ничего специфичного для сети).

Обычные SSL-сертификаты «веб-сервера» довольно часто содержат оба варианта использования - например, я смотрю сертификаты, выданные Let's Encrypt и DigiCert, и все они содержат оба варианта, поэтому могут использоваться для клиентской / взаимной аутентификации. ,

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

Например, OpenVPN раньше строго требовал « только TLS-клиента» (а не « хотя бы TLS-клиента», как это делают другие программы), поэтому его скрипт easy-rsa выдает сертификаты только для сервера и только для клиента, но не смешанный тип.


Поэтому вы должны проверить свои сертификаты и убедиться, что они содержат требуемый EKU. Практически любой инструмент сертификации выполнит эту работу - например, диалоговое окно свойств сертификата в Windows отобразит это в разделе "Расширения V3", как и веб-браузеры, openssl x509 , certtool , certutil и т.д.

Также стоит помнить, если вы используете свой собственный внутренний CA: если вы используете промежуточный сертификат CA , обратите на него внимание. Полупродукты не обязаны иметь расширение EKU, но если они есть, то все сертификаты , выданные что промежуточные ограничены этим. (Если вы получаете сертификаты на коммерческой основе, не нужно беспокоиться об этом.)


Кроме того, сертификат будет иметь основное поле "Использование ключа", которое содержит некоторые очень общие ограничения: например, "Цифровая подпись" означает, что сертификату разрешено подписывать данные (и, следовательно, допускается рукопожатие EDH/EECDH в TLS); "Соглашение о ключах", по-видимому, предназначено для статического DH/ECDH; "Ключ шифрования" позволяет рукопожатия статического RSA.

Официальная документация X.509v3 очень запутанна в том, что нужно, когда ... Коммерческие центры сертификации обычно получают это поле правильно. Но для частных ЦС это стоит перепроверить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .