Аутентификация смарт-карт веб-сайта PKSC #11 и сертификаты клиента SSL
мы создаем трехфакторную аутентификацию для веб-сайта из-за юридических требований в одной скандинавской стране. Клиент использует подключаемые модули браузера NetID для проверки подлинности сертификата PKCS #11 в браузере. Смарт-карты поставляются централизованно партнером по клиенту.
эта тема не имеет много онлайн-ресурсов или учебников. У кого-нибудь есть указатели на примеры реализаций или учебники, как сделать PKCS11 аутентификация в веб-браузере?
EDIT: найдено о сертификатах клиента SSL
похоже, что метод аутентификации-сертификат клиента SSL
Как мы управляем отношениями между пользователями и их смарт-картами?
предоставляют ли пользователи нам свои открытые ключи, и мы аутентифицируемся против них?
нам нужно подписать / предоставить каждого пользователя индивидуально, используя наш собственный сертификат?
все ли пользовательские смарт-карты содержат "общий" ключ, который мы тестируем против сертификата поставщика?
http://www.impetus.us / ~rjmooney/projects/misc/clientcertauth.html
3 ответов
Не делайте этого с 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 нет.
после редактирования вы должны прочитать о сертификационных центрах (CAs) и инфраструктурах открытых ключей (PKIs). Вы можете развернуть свой собственный внутренний PKI, но похоже, что ваши требования должны интегрироваться с существующим PKI. Это в основном административная проблема, поэтому проверьте с теми, кто делает это требование, чтобы увидеть, на какой CA они хотят полагаться (вероятно, их).
при использовании клиентских сертификатов аутентификация, клиент представит свой сертификат (который содержит открытый ключ пользователя и другие атрибуты, включая идентификатор: различающееся имя субъекта), и SSL/TLS рукопожатие гарантирует, что клиент имеет закрытый ключ для этого сертификата открытого ключа. Затем сервер проверяет этот сертификат против CAs, которому он доверяет (это также параметр SSL на стороне сервера).
Как только вы настроили, какому CAs вы хотите доверять, сопоставление обычно выполняется с помощью DN субъекта сертификата для внутреннего имени пользователя при необходимости. Для этого нет жесткого правила, поскольку оно зависит от вашей внутренней схемы именования пользователей. При этом часто разумно использовать полный DN субъекта в качестве имени пользователя.
В настоящее время вы не можете сделать PKCS#11 внутри процесса браузера. Все подходящие собственные технологии либо умирают (NPAPI), либо не реализованы через все браузеры. Вам нужно сделать это вне браузера и создать некоторую взаимосвязанную связь.
теперь вы можете это сделать. Веб-аутентификация с использованием смарт-карт или токенов PKCS#11 может быть реализована с помощью версии Silverlight NCryptoki. См.http://www.ncryptoki.com
У вас есть два chanches:
1) используя версию Silverlight NCryptoki и разработайте свой собственный пользовательский элемент управления Silverlight, который реализует ваш протокол аутентификации с помощью функций PKCS#11, поставляемых смарт-картой
2) использование плагина JQuery на основе над версией Silverlight и реализуйте протокол аутентификации в JavaScript, вызывая функции PKCS#11 в JavaScript