2017-03-23 4 views
2

pfx証明書のサムネイルを取得する関数javadript(forge)を記述する必要があります。テスト証明書(mypfx.pfx)を作成しました。 c#X509Certificate2ライブラリを使用すると、ファイルバイトの配列とパスワードを渡すことで、X509Certificate2オブジェクトの入力証明書の拇印を見ることができます。ここでは、C#のコードスニペットは、次のとおりです。JavascriptでX509Certificate拇印を取得するには?

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

しかし、私は(鍛造を使用して)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#の拇印と比較される:ここに私のJavascriptのコードです。私はpkcs12.jsファイルでさまざまな機能を試しました。いずれも動作しません。正しい拇印の結果が得られる限り、他のJSライブラリを使用しても問題ありません。私の間違いを助けて訂正してください。ありがとう!

答えて

2

異なるデータを比較しています。証明書の拇印は、公開鍵の指紋と同じではありません。

証明書の拇印は、証明書全体で計算されたハッシュです。あなたはこれは私が探しています正確に何であるこの

var certAsn1 = forge.pki.certificateToAsn1(cert); 
var certDer = forge.asn1.toDer(certAsn1).getBytes(); 
+0

を使用することができますフォージ方法はありませんが、あなたは(バイナリ)DERに鍛造証明書を変換するには、自分自身に

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

を計算することができそうです、ありがとう。 – Void

関連する問題