2017-03-23 26 views
2

자바 스크립트 (forge)에서 pfx 인증서의 미리보기를 가져 오는 함수를 작성해야합니다. 테스트 인증서 (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 

하지만 자바 스크립트 같은 일을하려고 할 때 (위조 사용). 정확한 지문을 얻을 수 없습니다. 여기 내 자바 스크립트 코드는 다음과 같습니다.

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# 엄지 손가락과 다른 것으로 보이는 것은 잘못되었습니다. 나는 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