Web浏览器证书注册(CSR生成)和证书下载到智能卡或USB令牌 [英] Web Browser Certificate Enrollment (CSR Generation) and Certificate Download to Smartcard or USB Token

查看:10
本文介绍了Web浏览器证书注册(CSR生成)和证书下载到智能卡或USB令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为证书颁发机构开发Web应用程序,作为其中的一部分,我需要

  1. 通过浏览器在用户智能卡中生成非对称密钥对-私钥和公钥,
  2. 创建证书签名请求(CSR)并将CSR发送到生成用户证书的证书颁发机构服务器。
  3. CA服务器将用户的证书发送到浏览器,需要通过浏览器下载到用户的智能卡或USB令牌中。

如何使用在现代浏览器中工作的JavaScript实现相同的功能?使用ActiveX和Java小程序不是选项。

推荐答案

透露:我在Cispl,Co.工作,该公司开发Signer。数字浏览器扩展

浏览器扩展可用于注册证书(生成CSR)以及从现代浏览器下载Windows证书存储或智能卡或USB令牌中的证书。浏览器扩展提供了JAVASCRIPT API,它反过来与运行在本地机器上的宿主应用程序对话,以在智能卡中执行所需的操作,并将响应返回给JAVASCRIPT(或说用户是网页)。

使用浏览器Java脚本API生成的CSRgenCSR可以发布到CA服务器以生成证书,或者如果您需要自签名证书,则可以发布到您的服务器。从服务器接收回的证书和信任证书链可以传递到ImportCer以在证书存储、智能卡或USB令牌中导入。

Signer.Digital浏览器扩展中可用于认证授权的API为:

  1. 检测已连接的智能卡:(自动检测已连接的智能卡或USB标记)

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

示例:

try 
{
    var SmartcardReaders = await SignerDigital.getPCSCReaders();
    var SCReaders = JSON.parse(SmartcardReaders);
    console.log(SmartcardReaders);
    console.log(SCReaders.length);
    if (SCReaders.length > 0)
    {
        $("#selSmartcard").empty();     //selSmartcard is HTML dropdown selector
        for (var i = 0; i < SCReaders.length; i++) {
            //ReaderNames are cryptic, convert to user friendly smartcard name
            var SCName = SignerDigital.getSCNameByReaderName(SCReaders[i]);  //Map PCSC ReaderName to User friendly smartcard name
            $("#selSmartcard").append(new Option(SCName));
        }
        
        //If Windows, add "Windows Certificate Store"
        if (SignerDigital.OSName == "Windows")
            $("#selSmartcard").append(new Option("Windows Certificate Store"));

        $('#selSmartcard option:eq(1)')
    }
}
catch (ErrorMsg) {
    alert(ErrorMsg);
}
  1. 生成CSR:(适用于证书存储、智能卡或USB令牌中的证书注册)

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

要实施密码策略,即。强制用户更改智能卡制造商设置的默认密码,将forceUserPinChangeIfDefault设置为true

示例扩展参数值:

{";SubjectAlternativeName";:";RFC822Name=cisplapp@gmail.com";} {";SubjectAlternativeName";:";DNSName=signer.digital;DNSName=charteredinfo.com;DNSName=multidomaincert.test";} {";SubjectAlternativeName";:";URI=https://web.signer.digital;URI=https://help.signer.digital";}

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

SignerDigital.importCer(PKCS11Lib, b64Payload, certIssuer)

b64有效负载以上参数的Json模型为:(以下模型的Json的Base64)

public class ImportCertReq
{
    public string UserCertB64 ;     //May be null to just import Trust Chain
    public List<string> TrustChainB64;  //May be null to just import USer Certificate
}

导入服务器承诺的成功响应Json模型为:

public class ImportCertResp
{
    public bool IsSuccessUserCertImport;
    public string UserCertImportOutcome; 
    public int TrustChainImportCount; 
    public string TrustChainImportOutcome; 
}

生成CSR导入证书API使用智能卡或USB令牌的PKCS#11库以实现跨操作系统的可组合性。因此,在使用这些JavaScript API之前,需要在用户的Windows PC上安装智能卡驱动程序。若要使用Windows证书存储,请将PKCS11Lib作为Microsoft增强型RSA和AES加密提供程序传递(&Q;)。

Signer中其他有用的属性和方法数字扩展

  1. SignerDigital.getHostDetails()//检查SDHostVersion>;=2以使genCSR和certImport API正常工作

响应模式:

HostDetails 
{
    public string OS ;
    public string OSPlatform;
    public string SDHostType ;
    public string SDHostVersion ;
    public DateTime? UpdateCheckedOn ;
    public int CheckForUpdateAfterDays ;
}
  1. SignerDigital.OSName

  2. 支持的SignerDigital.OSS

  3. SignerDigital.getPkcsLibByProvider(ProviderName)

  4. SignerDigital.getSCNameByReaderName(ReaderName)//使用上述第1点中列出的Promise getPCSCReaders()获取的ReaderName。

  5. SignerDigital.getPkcsLibBySCName(SCName)

您可以参考SO Answer了解其他证书、签名和加解密JavaScript接口。这些API使用Windows CSP,在Linux上使用PKCS#11。

以上API可能会进行现场测试Here

Signer.Digital生成CSR并下载证书流程

这篇关于Web浏览器证书注册(CSR生成)和证书下载到智能卡或USB令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆