2013-11-24 2 views
0

일부 데이터를 다른 서버로 보내는 nodejs로 작업하려고합니다. Nodejs는 https의 다른 서버와 통신하고 nodejs는 사용 가능한 루트 인증서로 다른 서버의 인증서를 확인합니다. 요구 사항은 노드가 승인되지 않은 노드를 거부해야한다는 것입니다.일부 인증서에 대해 unable_to_verify_leaf_signature로 Nodejs 오류가 발생했습니다.

일부 테스트 서버로 위의 설정을 테스트하고 있습니다. 한 테스트 서버의 경우 서버 인증서를 만들고 openSSL을 사용하여 자체 서명 된 CA 인증서 'CA1.cer'로 서명했습니다. 다른 테스트 서버의 경우 첫 번째 테스트 서버와 동일하지만 makecert 유틸리티를 사용합니다.

이제 CA 인증서를 nodejs 코드에 모두 포함 시켰습니다. 문제는 makecert 유틸리티를 사용하여 생성 된 certs가있는 테스트 서버에서 nodejs가 실패하는 것입니다. 그러나 동일한 코드가 openSSL을 사용하여 생성 된 certs를 가진 테스트 서버와 함께 작동합니다.

var options = { 
    host: host, 
    port: port, 
    path: pathname, 
    method: 'POST', 
    ca: [ fs.readFileSync('./ca1.cer'), //created using OpenSSL 
      fs.readFileSync('./ca2.cer') ], // created using makecert util 
    agent: false, 
    requestCert: true, 
    rejectUnauthorized: true, 
    auth: cred, 
    headers: { 
     'Content-Type': 'text/xml', 
     'Content-Length': xmldata.length 
    } 
}; 

도와주세요 : 반면 두 서버에서

내 nodejs 옵션

은 다음과 같습니다 나는 버전 v0.8.18 오전 .. 어떤 인증서 오류없이 브라우저에 잘 간다 ....

답변

0

문제가 해결되었습니다. makecert 유틸리티에서 생성 된 인증서는 .pem 형식이 아닙니다. .pem으로 변환하면 위의 코드가 작동합니다. 지원 Andrei에게 감사드립니다.

0

이 옵션에 추가, 유효하지 않은 SSL 인증서를 사용하여 서버에 요청을 허용하려면

"rejectUnauthorized": false 
+0

안녕하세요, 인증서가 브라우저에서 작동하는 동안 유효합니다. nodej와 함께 사용할 때만 인증서가 실패하는 이유를 찾으십시오. –

+0

발생한 오류를 발생시키는 SSL 인증서가있는 내부 문제는 다음에서 설명합니다. http://blog.gaeremynck.com/fixing-unable_to_verify_leaf_signature/ –

+0

의견을 보내 주셔서 감사합니다. 그러나 제 경우에는 두 인증서가 비슷한 방식으로 만들어지기 때문에 중간 CA가 관련되어 있다고 생각하지 않습니다. 또한 OpenSSL로 만든 인증서는 정상적으로 작동합니다. 서버 인증서에서 볼 수있는 유일한 차이점은 OpenSSL 인증서가 (버전 : V1, 서명 알고리즘 : sha1RSA, 일련 번호 : 01, prublic 키 : 2048 비트이고 "Authority Key Identifier"필드가 없음)입니다. Makecert 인증서는 (버전 : V3, 서명 알고리즘 : md5RSA, 일련 번호 : <16 진수 값>, 공개 키 : 1024 비트이고 "Authority Key Identifier"필드가 있습니다) –

관련 문제