Сертификат SSL не отображается при отправке запроса в приложение

Сертификат SSL не отображается при отправке запроса в приложение

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

Мне нужна помощь по этому вопросу

решение1

Примечание: центр сертификации не подписывает CSR; он подписывает сертификат, которыйчастичноосновано на КСО, но частично и нет (и обе части важны).

Ты говоришь 'аCSR был сгенерирован». Если вы действительно создали один CSR (для одного ключа) и получили два сертификата (каждый потенциально с цепочкой) для этого CSR и установили обе цепочки сертификатов в одну запись закрытого ключа в вашем хранилище, то второй заменил первый, и в вашем хранилище остался только второй.

Я предполагаю, что вместо этого вы сгенерировали два закрытых ключа и два CSR (по одному для каждого ключа) и для каждого CSR получили цепочку сертификатов и установили ее в соответствующий закрытый ключ, так что у вас на самом деле есть два закрытых ключа с разными цепочками сертификатов и вы хотите увидеть оба. Если сомневаетесь, используйте keytool -list [-v]для проверки.

Протокол SSL (теперь TLS) этого не делает.; сервер отправляет только один сертификат «сущности» (сервера) с его цепочкой сертификатов, если таковая имеется, и подтверждает соответствующий закрытый ключ в одном рукопожатии.

Тыможетиметь возможность сделать два запроса, каждый из которых получаетодиниз цепочек сертификатов, которые вы хотите:

  • Если сертификаты имеют разные имена Subject/SAN И ваш клиент использует расширение SNI, что делают последние браузеры, но другое программное обеспечение может или не может, сервер Java 8 предпочтет сертификат, соответствующий SNI. Большинство клиентов (но не OpenSSL!) всегда делают SNI таким же, как имя хоста, к которому подключено, поэтому вам может потребоваться (временно?) изменить разрешение имен, чтобы указать несколько имен хостов на один и тот же сервер, например, с помощью вашего hostsфайла или unbound или подобного.

  • Если сертификаты предназначены для разных типов ключей (RSA, DSA, EC), а клиент предлагает только наборы шифров, которые используют один тип ключа, сервер Java будет использовать сертификат для этого типа ключа. Некоторые клиенты позволяют вам легко контролировать предлагаемые наборы шифров, некоторые — нет.

  • Аналогично, если цепочки сертификатов используют разные (наборы) алгоритмов подписи, а клиент реализует TLS1.2 с расширением SignatureAlgorithms, то сервер Java 7+ предпочтет цепочку сертификатов, которая удовлетворяет SigAlgs. Но я не знаю ни одного клиента, который позволяет легко выбирать SigAlgs, и в любом случае центры сертификации предлагают небольшой выбор алгоритмов подписи, используемых в цепочках для выдаваемых ими сертификатов.

Связанный контент