SSL рукопожатие с включенным расширением SNI - выбор сертификата на сервере - PullRequest
0 голосов
/ 14 мая 2018

Во время рукопожатия SSL, когда расширение клиента включено в клиенте, сервер не выбирает и не передает желаемый сертификат клиенту.

У меня есть цепочка сертификатов, которую я импортировала в хранилище ключей JVM на сервере.

сертификат сервера, выданный внутренним промежуточным ЦС, выдавшим сертификат.

Тема: CN = myserver.example.com

промежуточный сертификат, выданный внутренним корневым центром сертификации.

        X509v3 Key Usage:
            Digital Signature, Certificate Sign, CRL Sign
        X509v3 Basic Constraints: critical
            CA:TRUE

самоподписанный сертификат корневого CA.

    X509v3 extensions:
        X509v3 Key Usage:
            Digital Signature, Certificate Sign, CRL Sign
        X509v3 Basic Constraints: critical
            CA:TRUE

Я использовал "openssl s_client" для тестирования.

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

openssl s_client -connect myserver.example.com:port

Я использовал следующую команду для тестирования с расширением TLS с указанием имени сервера (SNI) с включенным , и другой сертификат (по умолчанию?) Был выбран и представлен сервером при установлении связи SSL. Этого сертификата нет в хранилище ключей. Я этого не ожидал.

openssl s_client -connect myserver.example.com:port -servername myserver.example.com

Я пытаюсь выяснить, почему сервер не выбирает мою цепочку сертификатов, которая находится в хранилище ключей, а вместо этого выбирает «другой» (по умолчанию?) Сертификат, когда расширение SNI включено. Любая помощь будет оценена.

Я не знаю, как работает выбор сертификата на сервере во время процесса рукопожатия SSL.

1 Ответ

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

Я не знаю, как работает выбор сертификата на сервере во время процесса рукопожатия SSL.

Если клиент не отправляет SNI, сервер должен ответить сертификатом по умолчанию (но некоторые серверы не настроены по умолчанию, и квитирование не удается). Если клиент отправляет SNI, сервер должен выбрать соответствующий сертификат. Ваша проблема выглядит странно, потому что она не похожа ни на одну из возможностей. Попробуйте обновить свою JVM (OpenJDK? Oracle?) До последней версии, так как со времени вашей версии было много изменений, например Поддержка расширения индикации имени сервера (SNI) TLS на сервере JSSE .

...