我想从客户端的USB令牌或智能卡上获得带有数字签名的浏览器用户身份验证的JavaScript代码。但是我不知道如何使用USB令牌从浏览器对登录请求(例如authtoken或UserID和Passwrd)进行数字签名。我需要在浏览器上弹出一个窗口,以选择USB令牌形式的证书。我的用户在其PC上安装了各种品牌的USB令牌和相应的驱动程序。
我需要一种无需用户选择代答驱动程序的解决方案。
答案 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
所示。测试步骤:
为USB令牌或智能卡安装设备驱动程序-这将使您的证书在Windows证书存储区中
安装上面指示的setup。
重新启动Chrome浏览器。
输入用户名和密码,然后单击注册按钮-这将要求选择“数字签名”并在服务器上注册(仅对于此会话-不是永久的)。
然后再次输入相同的用户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