Отправка полной цепочки с карты общего доступа (CAC)? - PullRequest
1 голос
/ 08 декабря 2009

Я пытаюсь включить связь SSL от клиента веб-службы (Axis2), используя сертификат на CAC-карте пользователя. Работает как шарм .... ДО веб-сервера включен CAC. В этот момент соединение SSL отклоняется с сообщением об ошибке, что другие сертификаты в цепочке не были включены.

Я убедился, что поставщик доступен, либо добавив его в файл security.properties, либо создав его программным путем.

Мой текущий подход - просто установить системные свойства: System.setProperty ("javax.net.ssl.keyStore", "NONE"); System.setProperty ("javax.net.ssl.keyStoreType", "PKCS11");

Я понимаю из этого вопроса / ответа, что при таком подходе отправляется только сертификат "конечного объекта". Видимо мне нужно реализовать свой собственный X509KeyManager. Для меня это новое основание, кто-нибудь может предложить хороший справочник или примеры того, как это сделать?

Ценю помощь.

1 Ответ

1 голос
/ 08 декабря 2009

Наилучшая реализация менеджера ключей зависит от поставщика сертификатов, которые вы ожидаете использовать.

Если сертификат на CAC пользователя будет всегда выдан конкретным центром сертификации, просто сохраните сертификат этого эмитента и любые промежуточные сертификаты далее по цепочке в файле PKCS # 7. В методе getCertificateChain() эта коллекция может быть добавлена ​​вслепую к сертификату пользователя и возвращена.

Если все не так просто, но можно перечислить полный список возможных эмитентов, получить все их сертификаты и их сертификаты эмитента и т. Д., Вплоть до корневых сертификатов.

Добавить все корневые сертификаты в хранилище ключей в качестве доверенных записей. Объедините промежуточные сертификаты в файл формата PKCS- # 7 -

Реализация X509KeyManager (или расширение X509ExtendedKeyManager, если вы работаете с SSLEngine). В частности, в методе getCertificateChain() вы будете использовать CertPathBuilder для создания допустимой цепочки от сертификата пользователя до доверенного корня. target - это сертификат, который вы загружаете из CAC пользователя с параметром alias. доверенные корни - это сертификаты в хранилище доверенных сертификатов, которые вы создали; промежуточные сертификаты могут быть загружены из файла PKCS # 7 и добавлены к параметрам компоновщика. После создания цепочки получить путь к сертификату и преобразовать его в массив. Это результат метода getCertificateChain().

Если вы не можете предсказать, кто будет выдавать сертификат пользователя, вы можете получить промежуточные сертификаты во время выполнения из каталога LDAP или другого хранилища. Это совершенно новый уровень сложности.

...