【问题标题】:How to get X509Certificate thumbprint in Javascript?如何在 Javascript 中获取 X509Certificate 指纹?
【发布时间】:2017-08-15 16:01:27
【问题描述】:

我需要在 javascript (forge) 中编写一个函数来获取 pfx 证书的缩略图。我创建了一个测试证书(mypfx.pfx)。通过使用 c# X509Certificate2 库,我可以通过传递文件字节数组和密码来查看 X509Certificate2 对象中输入证书的指纹。这是c#代码sn-p:

X509Certificate2 certificate = new X509Certificate2(byteArrayCertData, password);
var thumbprint = certificate.Thumbprint;
//thumbprint is a hex encoding SHA-1 hash

但是当我尝试在 javascript 中做同样的事情时(使用 forge)。我无法获得正确的指纹。这是我的 Javascript 代码:

  var certi = fs.readFileSync('c:/mypfx.pfx');
  let p12b64 = Buffer(certi).toString('base64');
  let p12Der = forge.util.decode64(p12b64);
  var outAsn1 = forge.asn1.fromDer(p12Der);
  var pkcs12 = forge.pkcs12.pkcs12FromAsn1(outAsn1, false, "1234");
  var fp = null;
  for (var sci = 0; sci < pkcs12.safeContents.length; ++sci) {
    var safeContents = pkcs12.safeContents[sci];

    for (var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) {
      var safeBag = safeContents.safeBags[sbi];
      if (safeBag.cert != undefined && safeBag.cert.publicKey != undefined) {
        fp = forge.pki.getPublicKeyFingerprint(safeBag.cert.publicKey, {type: 'RSAPublicKey'});
        //Is this fingerprint value I am looking for??
        break;
      }
    }
  }

与 c# thumbprint 相比,结果是不同的值,这似乎是错误的。我在 pkcs12.js 文件中尝试了不同的功能。它们都不起作用。只要生成正确的指纹结果,使用其他 JS 库是可以接受的。请帮助并纠正我犯的任何错误。谢谢!

【问题讨论】:

    标签: javascript x509certificate2 pfx pkcs#12


    【解决方案1】:

    您正在比较不同的数据。证书指纹与公钥指纹不同。

    证书指纹是对整个证书计算的哈希值。貌似forge没有方法,不过你可以自己计算

    //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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多