Проверка подлинности смарт-карты сайта PKSC # 11 и сертификаты клиента SSL

http authentication ssl smartcard pkcs#11

16939 просмотра

4 ответа

47657 Репутация автора

Мы создаем трехфакторную аутентификацию для сайта в соответствии с требованиями законодательства одной скандинавской страны. Заказчик использует подключаемые модули браузера 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

Автор: Mikko Ohtamaa Источник Размещён: 09.01.2012 05:55

Ответы (4)


8 плюса

96871 Репутация автора

Решение

Не делай этого с помощью 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 там нет.


После внесения изменений вам следует прочитать о центрах сертификации (CA) и инфраструктурах открытых ключей (PKI). Вы можете развернуть собственную внутреннюю PKI, но, похоже, ваши требования должны быть интегрированы с существующей PKI. В основном это административная проблема, поэтому уточните у тех, кто предъявляет это требование, чтобы увидеть, на какой CA они хотят положиться (вероятно, на свой).

При использовании аутентификации на основе сертификата клиента клиент представляет свой сертификат (который содержит открытый ключ пользователя и другие атрибуты, включая идентификатор: отличительное имя субъекта), а рукопожатие SSL / TLS гарантирует, что у клиента есть закрытый ключ для этого. сертификат открытого ключа. Затем сервер проверяет этот сертификат на соответствие ЦС, которым он доверяет (это также параметр SSL на стороне сервера).

После того, как вы настроили, каким ЦС вы хотите доверять, сопоставление обычно выполняется с использованием DN субъекта сертификата и внутреннего имени пользователя, если это необходимо. Для этого нет строгого правила, поскольку оно зависит от вашей внутренней схемы именования пользователей. При этом часто целесообразно использовать полное имя субъекта в качестве имени пользователя.

Автор: Bruno Размещён: 09.01.2012 06:06

2 плюса

19 Репутация автора

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

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

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

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

Автор: Ugo Размещён: 19.10.2013 03:12

3 плюса

208 Репутация автора

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

Автор: hasa Размещён: 04.09.2014 03:48

0 плюса

46 Репутация автора

На сегодняшний день лучшим вариантом является использование расширения браузера для проверки подлинности браузера с использованием смарт-карты или USB-токена.

Методы, такие как java-апплеты, Active X и т. Д., Которые постепенно или постепенно прекращаются из новых предложений Modern Browser.

https://www.java.com/en/download/faq/chrome.xml

Плагин Java для веб-браузеров опирается на кроссплатформенную архитектуру плагинов NPAPI, которая поддерживается всеми основными веб-браузерами уже более десяти лет. Google Chrome версии 45 и выше прекратил поддержку NPAPI, поэтому Java Plugin больше не работает в этих браузерах.

В последнее время много говорят об API WebCrypto, но на данный момент API WebCrypto не предоставляет доступ к (Windows) или любым другим хранилищам ключей или локальному устройству шифрования USB / Smartcard.

Для аутентификации из браузера с использованием цифровой подписи одним из таких бесплатных расширений Chrome является расширение Signer.Digital chrome. Установку локальной системы (хост, работающий за браузером Chrome в Windows) можно загрузить с https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip. При установке и перезапуске Chrome автоматически добавляется Signer.Digital. Расширение Chrome

Фактическая работа этого расширения иллюстрируется здесь

Шаги тестирования:

  1. Установите драйверы устройств для вашего USB-токена или смарт-карты - это должно сделать ваш сертификат в хранилище сертификатов Windows

  2. Установите настройки, указанные выше.

  3. Перезапустите браузер Chrome.

  4. Откройте эту ссылку

  5. Введите UserID & Password и нажмите кнопку Register - здесь будет предложено выбрать цифровую подпись и зарегистрировать ее на сервере (только для этого сеанса - не постоянно).

  6. Затем снова введите одинаковые идентификатор пользователя и пароль, выберите тот же сертификат и нажмите « Войти» . Выбор другого сертификата не позволит войти в систему.

JavaScript для вызова метода из расширения:

Чтобы зарегистрировать сертификат на сервере:

//Get Selected Certificate Information 
SignerDigital.getSelectedCertificate()
    .then(
        function (CertInfo) {        
    //Success returns Certificate Subject and Thumbprint
        },
            function (errmsg) {
                //Send errmsg to server or display the result in browser.
              }
     );

Для аутентификации или авторизации с использованием цифровой подписи:

SignerDigital.signAuthToken(authToken, "SHA-256")       //or "SHA256"
    .then(
        function (SignData) {        //Success returns Signed Auth Token
        },
            function (errmsg) {
                //Send errmsg to server or display the result in browser.
              }
     );

Если не удалось: возвращает сообщение об ошибке, начиная с «SDHost Error:»

Автор: Bharat Vasant Размещён: 19.04.2019 02:01
Вопросы из категории :
32x32