Я хочу протестировать мою безопасную серверную реализацию с openssl (v. 1.0.1e). Я использую openssl в режиме клиента для подключения к серверу:

openssl s_client -cert client.pem -connect localhost:8888 -debug

Это успешно, и я вижу, что рукопожатие SSL имело место.

Сервер настроен на отклонение любого клиента, который не представляет сертификат. Я использую приведенную выше команду без ключа -cert но соединение с сервером успешно установлено.

В документации указано:

-серт сертификат
Сертификат для использования, если он запрашивается сервером. По умолчанию сертификат не используется.

В трассировке Wireshark (v. 1.8.10) я вижу, что оба сценария (т.е. с ключом -cert и без него) содержат одинаковые шаги. Протокол TLSv1:

  1. Клиент Привет
  2. Сервер Hello, Сертификат, Обмен ключами сервера, Сервер Hello Done
  3. Обмен ключами клиентов
  4. Изменить спецификацию шифра
  5. Зашифрованное сообщение рукопожатия
  6. Изменить спецификацию шифра
  7. Зашифрованное сообщение рукопожатия

Почему соединение успешно в обоих сценариях, хотя сервер должен отклонять клиентов без сертификатов? Указывает ли шаг 3, что сертификат клиента представлен на сервере? Как мне получить openssl, чтобы вообще не отправлять сертификат?

1 ответ1

0

Произошла неверная конфигурация с сервером, поэтому запрос сертификата никогда не отправлялся.

Если все правильно, тогда должен быть CertificateRequest во время ServerHello . Шаг 2 должен выглядеть так:

  1. Сервер Hello, Сертификат, Обмен ключами сервера, Запрос сертификата, Сервер Hello Done

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