使用USB令牌或智能卡上的数字签名证书从浏览器进行用户身份验证

时间:2019-04-19 05:57:53

标签: authentication certificate digital-signature smartcard pki

我想从客户端的USB令牌或智能卡上获得带有数字签名的浏览器用户身份验证的JavaScript代码。但是我不知道如何使用USB令牌从浏览器对登录请求(例如authtoken或UserID和Passwrd)进行数字签名。我需要在浏览器上弹出一个窗口,以选择USB令牌形式的证书。我的用户在其PC上安装了各种品牌的USB令牌和相应的驱动程序。

我需要一种无需用户选择代答驱动程序的解决方案。

2 个答案:

答案 0 :(得分:1)

Java小程序,Active X等方法已从新的Modern Browser产品中逐步淘汰。近年来,有关WebCrypto API的讨论很多,但到目前为止,WebCrypto API不能提供对(Windows)或任何其他密钥存储区或本地加密USB /智能卡设备的访问。

对于使用Digital Signature从浏览器进行身份验证,Signer.Digital chrome扩展程序是一种可用的免费Chrome扩展程序。可以从https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip下载本地系统(在Windows的chrome浏览器上运行的主机) 安装此主机并重新启动Chrome会自动添加Signer.Digital Chrome Extension

此扩展程序的实际工作如图here

所示。

测试步骤:

  1. 为USB令牌或智能卡安装设备驱动程序-这将使您的证书在Windows证书存储区中

  2. 安装上面指示的setup

  3. 重新启动Chrome浏览器。

  4. 打开this link

  5. 输入用户名和密码,然后单击注册按钮-这将要求选择“数字签名”并在服务器上注册(仅对于此会话-不是永久的)。

  6. 然后再次输入相同的用户ID和密码,并选择相同的证书,然后单击登录。选择其他证书将不允许登录。

从扩展名调用方法的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.
              }
     );

要签署PDF:

    //Calculate Sign for the Hash by Calling function from Extension SignerDigital
    SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256")      //or "SHA256"
     .then(
            function (signDataResp) {
              //Send signDataResp to Server
        },
            function (errmsg) {
                //Send errmsg to server or display the result in browser.
              }
     );

如果失败:,则返回错误消息,以“ SDHost错误:”开头

答案 1 :(得分:0)

您还可以签出https://fortifyapp.com,该客户端具有一个已安装的客户端,该客户端使Web应用程序能够利用智能卡,而用户无需做很多事情即可插入智能卡。

插入后,它会检查卡,然后尝试使用适当的驱动程序,并通过webcrypto polyfill加载Web应用程序后,便可以与令牌/智能卡进行交互。

您可以在此处详细了解其工作方式:https://unmitigatedrisk.com/?p=620