Как указать псевдоним в системном свойстве при создании 2way SSL con?
Я пытаюсь запустить клиент Java с 2way SSL, который использует карту CAC в качестве хранилища ключей для клиента. Я добавил следующее системное свойство в свою клиентскую программу, чтобы оно заработало, и изменил файл java.security, добавив поставщика pcks11.
System.setProperty("javax.net.ssl.keyStoreType", "pkcs11");
System.setProperty("javax.net.debug", "ssl");
Программа работает отлично и рукопожатие успешно сделано. Но проблема в том, что когда у меня есть несколько доверенных сертификатов на карте CAC, он принимает сертификат по умолчанию. Я хочу указать сертификат, который должен использоваться для аутентификации клиента, возможно, указать псевдоним. Я не нашел никакого системного свойства для этого. Пожалуйста, дайте мне знать, как указать псевдоним в качестве системного свойства, чтобы 2way SSL использовал указанный псевдоним для аутентификации клиента или есть какой-либо другой способ указать псевдоним. Как и в случае, если я получаю доступ к URL-адресу сервера из любого браузера, я получаю приглашение на выбор сертификата, и соединение устанавливается с выбранным сертификатом.
Заранее спасибо,
2 ответа
Для выбора сертификата клиента, реализация по умолчанию (sun.security.ssl.X509KeyManagerImpl
при условии, что вы используете Sun JRE) выбирает первый сертификат, который он может использовать для запроса.
PKCS#11 является немного конкретным случаем. Насколько я знаю, в каждом слоте будет только один закрытый ключ + цепочка сертификатов. Если в конфигурации вашего провайдера PKCS#11 не указан слот, по умолчанию будет 0.
Поскольку в свойствах java ssl нет определенного свойства, лучше искать другую существующую реализацию keymanager, которая поддерживает это, или написать свой собственный keymanager, чтобы вы могли выбрать конкретный сертификат с его псевдонимом.
Спасибо, Солнышко.