Вы создаете веб-приложение или пытаетесь написать программное обеспечение, которое работает на клиенте (вроде вашего собственного веб-браузера)?
Если вы создаете веб-приложение, это в значительной степени просто стандартная проверка подлинности клиента. Тот факт, что сертификат получен из аппаратного токена, для сервера мало что меняет; если вы хотите принимать только сертификаты CAC, вы можете указать набор допустимых политик сертификатов, когда сервер проверяет сертификат клиента. (Проверка политики является стандартной частью проверки PKIX.) Если это приложение предназначено для государственных заказчиков, вам необходимо тесно сотрудничать с их командой безопасности, чтобы убедиться, что ваше решение соответствует их требованиям, которые могут быть строгими. Если это ваш сценарий, дайте мне знать, и я дополню свой ответ некоторыми проблемами, с которыми мы столкнулись.
Если вы пишете клиент и вам нужен доступ к физическому считывателю, вы можете использовать Sun PKCS # 11 провайдера , начиная с Java 1.5. Я экспериментировал с этим провайдером, и вы можете прочитать больше об этом в другом ответе.
На сервере вы должны убедиться, что сертификат не отозван. Однако некоторые из этих списков отзыва сертификатов огромны - у нас было более 100 Мбайт файлов CRL, и встроенная программа проверки отзыва Sun плохо масштабируется до этого размера.
Вам также необходимо убедиться, что у вас есть правильные сертификаты корневого ЦС в хранилище ключей доверия "Tomcat" (правительственные сертификаты корневого ЦС найти немного сложнее, потому что они хотят убедиться, что пользователи проверяют их правильно). Мы также обнаружили, что Firefox не отправляет всю цепочку сертификатов, если пользователи не импортируют промежуточные сертификаты в свой браузер вручную.