Проверка подлинности смарт-карт сайта PKSC # 11 и сертификаты клиентов SSL - PullRequest
14 голосов
/ 09 января 2012

Мы создаем трехфакторную аутентификацию для сайта в соответствии с требованиями законодательства одной скандинавской страны. Заказчик использует подключаемые модули браузера NetID для проверки подлинности сертификата PKCS # 11 в браузере. Смарт-карты поставляются централизованно партнером по клиенту.

В этом предмете не так много онлайн-ресурсов или учебных пособий. У кого-нибудь есть указания на примеры реализации или учебные пособия, как выполнить аутентификацию PKCS11 в веб-браузере?

РЕДАКТИРОВАТЬ: Найдено о клиентских сертификатах SSL

  • Похоже, что методом аутентификации является SSL Client Certificate

  • Как мы управляем отношениями между пользователями и их смарт-картами?

  • Предоставляют ли пользователи нам свои открытые ключи, и мы аутентифицируемся на них?

  • Нужно ли подписывать / предоставлять каждого пользователя индивидуально, используя наш собственный сертификат?

  • Все ли пользовательские смарт-карты содержат «универсальный» ключ, который мы тестируем по сертификату провайдера?

http://www.garex.net/apache/

http://www.impetus.us/~rjmooney/projects/misc/clientcertauth.html

https://en.wikipedia.org/wiki/PKCS11

https://service.secmaker.com/examples/plugin.aspx

Ответы [ 3 ]

8 голосов
/ 09 января 2012

Не делайте этого с помощью 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 субъекта сертификата и внутреннего имени пользователя, если это необходимо. Для этого нет строгого правила, поскольку оно зависит от вашей внутренней схемы именования пользователей. При этом часто целесообразно использовать полное имя субъекта в качестве имени пользователя.

3 голосов
/ 04 сентября 2014

В настоящее время вы не можете сделать PKCS # 11 внутри процесса браузера. Все подходящие нативные технологии либо умирают (NPAPI), либо не реализованы во всех браузерах. Вам нужно сделать это вне браузера и создать какое-то взаимосвязанное сообщение.

2 голосов
/ 19 октября 2013

Теперь вы можете сделать это. Веб-аутентификация с использованием смарт-карт или токенов PKCS # 11 может быть реализована с помощью версии Silverlight NCryptoki. Смотри http://www.ncryptoki.com

У вас есть две возможности:

1) с помощью версии NCryptoki для Silverlight и разработки собственного пользовательского элемента управления Silverlight, который реализует протокол аутентификации с использованием функций PKCS # 11, предоставляемых смарт-картой

2) используя плагин JQuery на основе вышеуказанной версии Silverlight и реализуйте протокол аутентификации в JavaScript, вызывая функции PKCS # 11 в JavaScript

...