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

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

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

-1
15.04.2017, 02:28
1 ответ

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

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

Я предполагаю, что вместо этого вы сгенерировали два закрытых ключа и два 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, и в любом случае CA предлагают небольшой выбор алгоритмов подписи, используемых в цепочках для выпускаемых ими сертификатов.

0
28.01.2020, 05:13

Теги

Похожие вопросы