Однако проблема, с которой я сталкиваюсь, заключается в том, что браузер никогда не предлагает мне выбрать один из доступных сертификатов, как будто я видел, как он работает у других, которые делают то же самое (см. этот вопрос и этот сайт). Я протестировал свой браузер на таких сайтах, как Login.gov и других правительственных сайтах: у меня появляется всплывающее меню, в котором я могу выбрать сертификат, поэтому я знаю, что проблема не в настройках моего браузера. Я даже могу открыть настройки браузера и просмотреть сертификаты на подключенной мной смарт-карте, чтобы знать, что она их видит.
В настоящее время мой файл server.xml имеет соединители https. вот так:
Код: Выделить всё
В моем Java-сервлете у меня есть:
Код: Выделить всё
// there are various types and providers, but these were the ones that worked
KeyStore keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
// load local certificates (the certificates visible in your browser)
keyStore.load(null);
// get all the names of the available certificates
Enumeration aliases = keyStore.aliases();
Код: Выделить всё
URL url = new URL(certificateRequestUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
Integer responseCode = connection.getResponseCode(); // error thrown here
< strong>Обновление от 18 июня 2024 г.: Я добавил параметр Java (в Tomcat) -Djavax.net.debug=ssl и увидел некоторые дополнительные сведения:
Код: Выделить всё
javax.net.ssl|ERROR|F3|https-jsse-nio-8444-exec-6|2024-06-18 13:29:13.491 MDT|TransportContext.java:363|Fatal (BAD_CERTIFICATE): Empty client certificate chain (
"throwable" : { javax.net.ssl.SSLHandshakeException: Empty client certificate chain at ... }
)
javax.net.ssl|WARNING|F3|https-jsse-nio-8444-exec-6|2024-06-18 13:29:13.494 MDT|SSLEngineOutputRecord.java:173|outbound has closed, ignore outbound application data
javax.net.ssl|DEBUG|E2|https-jsse-nio-8443-exec-1|2024-06-18 13:29:13.497 MDT|Alert.java:238|Received alert message (
"Alert": {
"level" : "fatal",
"description": "bad_certificate"
}
)
javax.net.ssl|ERROR|E2|https-jsse-nio-8443-exec-1|2024-06-18 13:29:13.500 MDT|TransportContext.java:363|Fatal (BAD_CERTIFICATE): Received fatal alert: bad_certificate (
"throwable" : {
javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate at ... }
)
Примечание. Хотя у меня есть смарт-карта временная — без цепочки сертификатов, — у некоторых пользователей этого приложения цепочка сертификатов будет связана с доверенным центром сертификации. Нужно ли мне добавлять сертификат пользователя в хранилище доверенных сертификатов сервера во время настройки карты с его учетной записью, чтобы приниматься будущие подтверждения SSL?
Я думаю, что мой вопрос очень похоже на этот, но у меня будет несколько пользователей, которым необходимо добавить свои сертификаты в хранилище доверенных сертификатов сервера во время настройки учетной записи, поэтому его нужно добавить программно в java. Если это так, как мне предложить пользователю выбрать, какой сертификат (если доступно несколько) добавить в хранилище доверенных сертификатов? В некоторых случаях сертификат пользователя не будет иметь цепочки, тогда как для других пользователей он может иметь цепочку сертификатов, и может потребоваться добавить корень.
Я знаю, что и Java, и мой браузер может видеть мои сертификаты, так почему мой браузер не предоставляет всплывающее меню для выбора сертификата и ввода PIN-кода (при необходимости)? Как заставить браузер отображать эти всплывающие окна?
Подробнее здесь: https://stackoverflow.com/questions/786 ... -10-server
Мобильная версия