Вопрос

Это перекрестный пост от Crypto Dev Ml Mozilla. Надеясь, что кто -то на них, так что имеет некоторый опыт использования org.mozilla.jss. Ссылка: JSS - MDN

Я пытаюсь сделать два отдельных HTTPS -запроса на удаленный хост, используя два клиентских сокета и два разных сертификата клиента соответственно (Client Cert A и B). Моя тестовая программа - модифицированная версия Ssltest.java

От моего хозяина я могу сделать два подключения на двух разных розетках с удаленным хостом. Я могу получить 200 OK от удаленного веб -сервера для обоих отдельных подключений.

Моя проблема в том, что сертификат клиента «A» используется для обоих соединений «A» и «b».

Я использовал это конструктор:

public SSLSocket(java.lang.String host,int port, 
java.net.InetAddress localAddr, 
int localPort, 
SSLCertificateApprovalCallback certApprovalCallback, 
SSLClientCertificateSelectionCallback clientCertSelectionCallback)

Я также реализовал интерфейс SSLClientCertificateSelectionCallback (источник), чтобы использовать вышеуказанный конструктор и передать правильный сертификат клиента. Кроме того, я поместил линию в своем реализованном SSLClientCertificateSelectionCallback select() Функция для регистрации при выполнении обратного вызова.

Запуск моего приложения и проверка журнала, метод SELECT () вызывает только один раз во время создания первого SSLSOCKE (выбор Client Cert 'A') и никогда не в будущих экземплярах SSLSOCKE, когда указано прозвище Cert Cert B. На самом деле, я должен перезагрузить приложение для select() быть снова запустившимся.

Есть ли способ запустить нативный код обратного вызова для запуска select() Когда сертификат запрашивается удаленным сервером?

Спасибо,

Премьер -министр

Это было полезно?

Решение

Похоже, что может быть какое -то кэширование сеансов. Вы сказали, что используете sslsocket. Вы пробовали установить кэширование сеанса в False? По умолчанию SSLSocket позволяет кэшировать сеанс.

Например, в классе SSLSocket есть метод public void useCache(boolean b) Если вы установите, пропустите это параметр false После создания сокета, мы надеемся, что это помешает серверу кэшировать ваш первый сеанс (я предполагаю, что вы вызовут оба клиентских подключения из одной программы). Таким образом, он должен побудить вас к другому запросу на сертификат со второго соединения, как вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top