我需要在javascript(forge)中编写一个函数来获取pfx证书的缩略图。我创建了一个测试证书(mypfx.pfx)。通过使用c#X509Certificate2库,我可以通过传递文件字节数组和密码来查看X509Certificate2对象中输入证书的指纹。这是c#代码段:
df <- data.frame(RSID = c("rs12345.", "rs3984.", "rs12398432.", "rs79372."),
ALLELE = paste0(LETTERS[1:4], "."), stringsAsFactors=FALSE)
但是当我试图在javascript(使用伪造)做同样的事情。我无法获得正确的指纹。这是我的Javascript代码:
X509Certificate2 certificate = new X509Certificate2(byteArrayCertData, password);
var thumbprint = certificate.Thumbprint;
//thumbprint is a hex encoding SHA-1 hash
与c#thumbprint相比,结果是不同的值,这似乎是错误的。我在pkcs12.js文件中尝试了不同的功能。它们都不起作用。只要产生正确的指纹结果,使用其他JS库是可以接受的。请帮助并纠正我犯的任何错误。谢谢!
答案 0 :(得分:2)
您正在比较不同的数据。证书指纹与公钥指纹不同。
证书指纹是在整个证书上计算的哈希值。似乎伪造没有方法,但你可以自己计算
//SHA-1 on certificate binary data
var md = forge.md.sha1.create();
md.start();
md.update(certDer);
var digest = md.digest();
//print as HEX
var hex = digest.toHex();
console.log(hex);
要将伪造证书转换为DER(二进制),您可以使用此
var certAsn1 = forge.pki.certificateToAsn1(cert);
var certDer = forge.asn1.toDer(certAsn1).getBytes();