Подтвердить что ты не робот

Веб-сайт PKSC №11 аутентификация смарт-карт и сертификаты SSL-клиентов

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

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

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

  • Похоже, что метод проверки подлинности является сертификатом клиента SSL

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

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

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

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

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

4b9b3361

Ответ 1

Не делайте этого с помощью 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 они хотят полагаться (возможно, их).

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

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

Ответ 2

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

Ответ 3

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

У вас есть две чины:

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

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

Ответ 4

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

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

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

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

В последнее время много говорят об 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. Затем снова введите одинаковые UserID и Password, выберите тот же сертификат и нажмите Login. Выбор другого сертификата не позволит войти в систему.

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:"