Не делайте этого с помощью JavaScript. Криптография JavaScript имеет ряд проблем , и я не думаю, что многие браузеры позволят вам легко получить доступ к PKCS # 11 непосредственно из JavaScript (запущенного изнутри страницы).
Некоторые браузеры поддерживают PKCS # 11 для аутентификации HTTPS, то есть используют PKCS # 11 для аутентификации сертификата клиента как часть соединения SSL / TLS (как часть HTTPS).
Предполагая, что у вас уже есть библиотека PKCS # 11 (скажем, OpenSC в /usr/lib/opensc.so
), вы можете настроить Firefox для ее использования:
- Настройки -> Дополнительно -> Шифрование, перейдите в «Устройства безопасности»
- Нажмите «Загрузить»
- Выберите имя модуля (для вашей собственной ссылки в списке) и укажите файл
/usr/lib/opensc.so
(или любой другой подходящий для вас модуль PKCS # 11).
Затем, когда вы подключаетесь к веб-сайту, который запрашивает сертификат клиента, браузер должен предложить вам выбрать сертификат на устройстве с поддержкой PKCS # 11.
Механизм конфигурации PKCS # 11 будет варьироваться от одного браузера к другому, но обычно это вопрос настройки пути модуля PKCS # 11.
Насколько я знаю, Internet Explorer не использует PKCS # 11 (по крайней мере, без дополнительной поддержки), но вместо этого должен полагаться на MS CryptoAPI и InfoCards.
На стороне сервера вам нужно будет настроить требование для проверки подлинности сертификата клиента. Там нет ничего конкретного для PKCS # 11.
После внесения изменений вам следует прочитать о центрах сертификации (ЦС) и инфраструктурах открытых ключей (PKI). Вы можете развернуть собственную внутреннюю PKI, но, похоже, ваши требования должны быть интегрированы с существующей PKI. В основном это административная проблема, поэтому уточните у тех, кто предъявляет это требование, на какой CA они хотят положиться (вероятно, на свой).
При использовании аутентификации на основе сертификата клиента клиент представляет свой сертификат (который содержит открытый ключ пользователя и другие атрибуты, включая идентификатор: отличительное имя субъекта), а рукопожатие SSL / TLS гарантирует, что клиент имеет личный ключ для этого сертификата открытого ключа. Затем сервер проверяет этот сертификат на соответствие ЦС, которым он доверяет (это также параметр SSL на стороне сервера).
После того, как вы настроили, каким CA вы хотите доверять, сопоставление обычно выполняется с использованием DN субъекта сертификата и внутреннего имени пользователя, если это необходимо. Для этого нет строгого правила, поскольку оно зависит от вашей внутренней схемы именования пользователей. При этом часто целесообразно использовать полное имя субъекта в качестве имени пользователя.