Web浏览器证书注册(CSR生成)和证书下载到智能卡或USB令牌 [英] Web Browser Certificate Enrollment (CSR Generation) and Certificate Download to Smartcard or USB Token
问题描述
我正在为证书颁发机构开发Web应用程序,作为其中的一部分,我需要
- 通过浏览器在用户智能卡中生成非对称密钥对-私钥和公钥,
- 创建证书签名请求(CSR)并将CSR发送到生成用户证书的证书颁发机构服务器。
- CA服务器将用户的证书发送到浏览器,需要通过浏览器下载到用户的智能卡或USB令牌中。
如何使用在现代浏览器中工作的JavaScript实现相同的功能?使用ActiveX和Java小程序不是选项。
推荐答案
透露:我在Cispl,Co.工作,该公司开发Signer。数字浏览器扩展
浏览器扩展可用于注册证书(生成CSR)以及从现代浏览器下载Windows证书存储或智能卡或USB令牌中的证书。浏览器扩展提供了JAVASCRIPT API,它反过来与运行在本地机器上的宿主应用程序对话,以在智能卡中执行所需的操作,并将响应返回给JAVASCRIPT(或说用户是网页)。使用浏览器Java脚本API生成的CSRgenCSR可以发布到CA服务器以生成证书,或者如果您需要自签名证书,则可以发布到您的服务器。从服务器接收回的证书和信任证书链可以传递到ImportCer以在证书存储、智能卡或USB令牌中导入。
Signer.Digital浏览器扩展中可用于认证授权的API为:
- 检测已连接的智能卡:(自动检测已连接的智能卡或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);
}
- 生成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";}
- 导入/下载证书(将用户证书和信任证书链导入到证书存储、智能卡或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中其他有用的属性和方法数字扩展
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 ;
}
SignerDigital.OSName
支持的SignerDigital.OSS
SignerDigital.getPkcsLibByProvider(ProviderName)
SignerDigital.getSCNameByReaderName(ReaderName)//使用上述第1点中列出的Promise getPCSCReaders()获取的ReaderName。
SignerDigital.getPkcsLibBySCName(SCName)
您可以参考SO Answer了解其他证书、签名和加解密JavaScript接口。这些API使用Windows CSP,在Linux上使用PKCS#11。
以上API可能会进行现场测试Here
Signer.Digital生成CSR并下载证书流程
这篇关于Web浏览器证书注册(CSR生成)和证书下载到智能卡或USB令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!