通过浏览器访问ePass2003 Auto令牌

Mit*_*itz 2 hardware firefox pki pkcs#11 hsm

我已经加载了带有自签名证书的 ePass2003 Auto 令牌。我将 lib**.so 文件加载到 Firefox 中,现在 Firefox 可以在令牌中列出证书。我的要求是访问密钥库进行签名、加密和解密,即用于对其进行加密操作的公钥和私钥。我可以请求有关 javascript API 的指导来执行上述加密操作吗?

Bha*_*ant 6

披露:我在 CISPL 工作

要访问 ePass2003 或任何智能卡或加密 USB 令牌,您需要使用浏览器扩展。据我所知,浏览器可能会使用加密设备中的密钥进行 TLS 握手。我的公司提供了这样的扩展Signer.Digital Browser ExtensionChrome火狐浏览器

Windows Host 可以从https://signer.digital/downloads/Signer.Digital.Browser.Extension.Setup.msi下载

在 Windows 上,我们不需要 PKCS#11,但我们使用 Windows CSP。因此,必须在 Windows 客户端设备上安装 USB 令牌驱动程序才能通过 Web 浏览器运行。lib**.so 文件不适用于 Windows,但适用于 Linux。

Linux 主机使用此 .so 文件和 PKCS#11 来完成任务,但这对 ePass2003 用户是透明的,主机应用程序会处理此问题。

我的要求是访问密钥库进行签名、加密和解密,即用于对其进行加密操作的公钥和私钥。我可以请求有关 javascript API 的指导来执行上述加密操作吗?

我列出的 javascript API(Signer.Digital 版本 1.8.0)提供以下承诺:

  1. 选择证书:这将打开弹出窗口以选择证书。可以提供 certThumbPrint 参数来静默选择证书。

SignerDigital.getSelectedCertificate(certThumbPrint = "", showExpired = false, keyUsageFilter = 128)

keyUsageFilter值将按照 System.Security.Cryptography.X509Certificates.X509KeyUsageFlags 枚举,并且可以添加(求和)多个值。

  1. 签名哈希:

SignerDigital.signHash(hash, certAlgorithm, certThumbPrint = "")

  1. 对Authtoken/数据进行签名:计算数据的哈希值,然后对哈希值进行签名。

SignerDigital.signAuthToken(authtoken, certAlgorithm, certThumbPrint = "", showExpired = false)

certAlgorithm是要使用的算法。例如:“SHA256”或“SHA-256”

此处可以使用showExpired标志,以允许用户仅使用过期的证书登录,并仅提供对用户可以上传新证书的区域的访问权限。

  1. 签名 PDF - 返回 PKCS7 签名容器

SignerDigital.signPdfHash(hash, certThumbPrint, certAlgorithm)

SignerDigital.signHashCAdESBr(hash, certThumbPrint, certAlgorithm) //对于巴西 ICP

PDF 签名和基于数字签名的身份验证的工作可以在https://web.signer.digital/进行测试

  1. 签署 XML:

SignerDigital.signXML(xmlDoc, xmlSignParms, certThumbPrint)

xmlSignParms 具有更广泛的参数,我们根据努力提供集成支持。

  1. RSA加密:(使用用户私钥)

SignerDigital.encryptB64Data(b64Data, useOAEPPadding, certThumbPrint = "", showExpired = false, keyUsageFilter = 32)

例子:

var strToEnc = "Clear Text String to Encrypt.";
var strB64Data = btoa(strToEnc);
console.log("Base64 String of Clear Text String: " + strB64Data);

//Do not provide last parm - certThumbPrint to open dialog to select certificate.
SignerDigital.encryptB64Data(strB64Data, false, "224D7F695ABF0E22EA8D314497F5B56AEFA96FFE") //false for PKCS1 padding, true for OAEP padding
  .then(
    function(EncryptedB64String) { //Success returns xmlSign
      console.log("Encrypted Base64 String: " + EncryptedB64String);
      console.log("Encrypted String: " + atob(EncryptedB64String));
    },
    function(ErrMsg) {
      console.log(ErrMsg);
    }
  )
Run Code Online (Sandbox Code Playgroud)

  1. RSA解密:(使用用户私钥)

SignerDigital.decryptB64Data(b64Data, useOAEPPadding, certThumbPrint = "", showExpired = false, keyUsageFilter = 32)

例子:

console.log("Encrypted B64 string from server: " + EncB64String);
SignerDigital.decryptB64Data(EncB64String, false, "224D7F695ABF0E22EA8D314497F5B56AEFA96FFE")
  .then(
    function(DecryptedB64String) { //Success returns xmlSign
      console.log("Decrypted Base64 String: " + DecryptedB64String);
      console.log("Decrypted String: " + atob(DecryptedB64String));
    },
    function(ErrMsg) {
      console.log(ErrMsg);
    }
  )
},
error: function(msg) {
  console.debug(msg);
}
Run Code Online (Sandbox Code Playgroud)

  1. 签署 IT/eTDS 申报表:(签署印度所得税/eTDS 申报表 - 与 signHash 方法相同,但附加可选参数除外:PAN)

SignerDigital.signITHash(hash, PAN, certThumbPrint = "")

将 PAN 传递为空白以打开“选择证书”对话框。如果 PAN 非空,并且存在 PAN 证书,则将静默选择证书。

  1. 签署 CMS:(对印度 GST 申报表进行数字签名)

SignerDigital.signHashCms(hash, certAlgorithm, certIncludeOptions = 2, certThumbPrint = "")

对 ICP-Brazil 签名使用方法SignerDigital.signHashCAdESBr ,对埃及 ITIDA CAdES-BES 签名使用方法SignerDigital.signHashCAdESEg 。

  1. 签署 IceGate 数据:(签署 IceGate - 印度海关数据 - Json、文本、XML)

SignerDigital.signIceGate(b64Data, certThumbPrint = "")

2021 年 7 月添加了以下 API 供认证机构使用(CA 需要使用 Signer.Digital 浏览器扩展进行注册)

  1. 检测连接的智能卡:(自动检测连接的智能卡或 USB 令牌)

SignerDigital.getPCSCReaders(onlyConnected = true) //列出PCSC读卡器,如果要列出所有可用的读卡器,请将参数设置为false

  1. 生成 CSR:(用于智能卡或 USB 令牌中的证书注册)

SignerDigital.genCSR(PKCS11Lib, certSubject, certIssuer, keyBits = 2048, hasgAlgorithm = "SHA256", forceUserPinChangeIfDefault = false)

  1. 导入/下载证书(将用户证书和信任证书链导入到智能卡或 USB 令牌)

SignerDigital.importCer(PKCS11Lib, b64Payload, certIssuer)

有关更多详细信息,自动智能卡检测genCSRimportCer的代码示例请参阅带有流程图的答案

2021 年 6 月更新

Signer.Digital 浏览器扩展主机版本 1.7.0 现在通过询问用户尝试访问证书/密钥的允许来源(网站)来提供更好的用户控制以增强安全性。此外,此版本还具有自动更新功能,以便用户在通过用户帐户控制对话框批准更新后自动获取任何安全更新/增强功能。

Signer.Digital 浏览器扩展允许的来源对话框

  • 您不需要浏览器来访问硬件密钥;本地应用程序非常适合这样做(事实上,您的扩展证明了这一点;它使用本地应用程序作为“本机消息传递”服务器来破坏浏览器沙箱)。用户不需要采取行动来确保他们下载的内容安全;它应该 - 需要 - *默认情况下*安全。不过,我很高兴听到你正在做出改进。还应考虑禁用对密钥的透明访问,至少对于给定站点对密钥的首次访问,尤其是不要使用公共数据(证书指纹)来识别透明访问的秘密密钥。 (2认同)