2017-11-14 1 views
0

https를 통해 상호 작용하는 nodejs 클라이언트와 서버가 있습니다. 자체 서명 된 인증 기관, 서버 인증서 및 몇 가지 테스트 클라이언트 인증서가 있습니다. openssl s_server 및 s_client를 사용하여 인증서가 자체 서명 된 인증서에 필요한 명령 줄 옵션을 사용하여 '작동 중'임을 테스트했으며 오류가 생성되지 않았습니다. 클라이언트에nodejs https 클라이언트 인증서가 전송되지 않았지만 전송되었습니다.

`Error: 140735833322304:error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate:../deps/openssl/openssl/ssl/s3_srvr.c:3330:` 

오류는 다음과 같습니다 :

클라이언트가 HTTPS를 통해 서버에 연결

, 서버는 즉시 피어 인증서를 가져올 수 없습니다라는 오류가 발생합니다

`{ Error: socket hang up 
    at TLSSocket.onConnectEnd (_tls_wrap.js:1073:19) 
    at Object.onceWrapper (events.js:322:30) 
    at emitNone (events.js:120:20) 
    at TLSSocket.emit (events.js:218:7) 
    at endReadableNT (_stream_readable.js:1054:12) 
    at _combinedTickCallback (internal/process/next_tick.js:138:11) 
    at process._tickCallback (internal/process/next_tick.js:180:9) 
    code: 'ECONNRESET', 
    path: null, 
    host: 'localhost', 
    port: 443, 
    localAddress: undefined }` 

`140735833322304:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:1494:SSL alert number 40` 

`140735833322304:error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:1217: 
` 

그러나 URL의 핸들러가 실행되어 req.socket.getPeerCertificate()를 호출하고 클라이언트 인증서가 명확하게 전송되었습니다.

클라이언트가 실제로 인증서를 전송할 때 왜 이러한 오류가 발생합니까?

도움을 주시면 감사하겠습니다.

+0

주셔서 감사합니다 : https://stackoverflow.com/questions/27611193/curl-ssl-with-self-signed-certificate – krish

답변

0

나는 두 가지 문제가있는 것처럼 보입니다. 첫째, 인증서를 읽을 수있는 이유는 두 번째 https 요청이 무의식적으로 코드의 다른 곳에서 발행 되었기 때문입니다.

두 번째로 인증서를 보내지 않은 클라이언트의 오류는 인증서가 전송 될 때 약간의 오류가 발생합니다. 궁극적으로 서버가 클라이언트를 확인하는 데 사용하는 부적절한 CA 체인이었습니다.

이이 문제의 친구를 해결할 수 있습니다 당신의 도움이

+0

'피어 인증서를 반환하지 않았습니다 '꽤 명확하다. – EJP