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

问题描述 投票:1回答:2

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

我需要一个解决方案,用户不必选择令牌驱动程序。

authentication certificate digital-signature smartcard pki
2个回答
1
投票

Java applet,Active X等方法正在逐步淘汰新的Modern Browser产品。最近有很多关于WebCrypto API的讨论,但截至目前,WebCrypto API不提供对(Windows)或任何其他Key存储或本地加密USB /智能卡设备的访问。

对于使用数字签名从浏览器进行身份验证,可以使用一个免费的Chrome扩展程序是Signer.Digital 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. 输入UserID和Password并单击Register按钮 - 这将要求选择Digital Signature并在服务器上注册(仅适用于此会话 - 不是永久性的)。
  6. 然后再次输入相同的UserID和密码并选择相同的证书并单击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.
              }
     );

签署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错误:”开头的错误消息


0
投票

您还可以查看具有客户端的https://fortifyapp.com,该客户端一旦安装,就可以使Web应用程序使用智能卡而无需用户执行更多操作而不是插入智能卡。

插入后,它检查卡,然后尝试相应的驱动程序,一旦加载Web应用程序,通过webcrypto polyfill,可以与令牌/智能卡交互。

你可以在这里阅读更多关于它是如何工作的:https://unmitigatedrisk.com/?p=620

© www.soinside.com 2019 - 2024. All rights reserved.