2016-05-26 3 views
1

Ich erhalte diesen FehlerBuchse [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c: 590) von Client.py zu Knoten Server.js

File "C:\Python27\lib\ssl.py", line 844, in connect 
    self._real_connect(addr, False) 
    File "C:\Python27\lib\ssl.py", line 835, in _real_connect 
    self.do_handshake() 
    File "C:\Python27\lib\ssl.py", line 808, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) 

Ich versuche, eine sichere Verbindung (ssl.socket) zu etablieren zwischen einem Python-Client und einem node.js-Server und ich nahm den obigen Fehler. Ich weiß nicht, was fehlt oder was meine Schuld ist. Hier ist meine Quellcode sowohl für Python-Client und für node.js Server

Server Sockel in Node.js:

var _HOST = '192.168.1.136'; 
    var _PORT = 1337; 
    var _address; 

    const tls = require('tls'); 
    const fs = require('fs'); 

    const options = { 
     // These are necessary only if using the client certificate authentication 
     key: fs.readFileSync('./SSL_TLS/ServerCakey.pem'), 
     cert: fs.readFileSync('./SSL_TLS/Server-cert.pem'), 
     requestCert: true 
    }; 

    var server = tls.createServer(options, (socket) => { 
     //const ProtocolEmmitter = new BasicProtocolEmmitter(); 

     socket.on('connect', (e) => { 
      console.log('client connected ' + 
       socket.remoteAddress + ':' + 
       socket.remotePort); 
      console.log('server connected', 
       socket.authorized ? 'authorized' : 'unauthorized'); 
     }); 

     socket.on('data', function(data) { 
      console.log('clients says' + ': ' + data); 
     }); 

     socket.on('error', function(data) { 
      console.log('client on error', data); 

     }); 

     socket.on('close', (e) => { 
      console.log('client disconnected'); 
      socket.end; 
      setTimeout(() => { 
       server.close(); 
       server.listen(_PORT, _HOST,() => { 
        _address = server.address(); 
        console.log('opened server on %j', _address); 
        console.log(' Server listening on %j ', _HOST, ':', _PORT); 
       }); 
      }, 10000); 
     }); 

    }); 

und hier ist mein Client.py Sockel: (Ich verwende Python 2.7.11

)
class SSLSocket: 
    def __init__(self): 
     Context = self.__loadContext() 
     self._SSL_Sock = Context.wrap_socket(socket.socket(socket.AF_INET), 
                  server_hostname=host) 
     self._SSL_Sock.connect((host, port)) 

    def __loadContext(self): 
     context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
     context.verify_mode = ssl.CERT_REQUIRED 
     context.check_hostname = True 
     context.load_verify_locations("..Path/Client.crt") 
     return context 

ich vergaß zu erwähnen, dass ich mit Erfolg schaffen die client.crt und ich bestätigen es mit Erfolg

`openssl x509 -req -days 365 -in server.csr -signkey server.key -out client.crt` 

Signature Ok 

Antwort

1
context.load_verify_locations("..Path/Client.crt") 

Ich denke, Sie Probleme haben, hier:

  • Falsche Einrichtung des Vertrauenspfad: load_verify_locations sollte die vertrauenswürdige CA-Setup, dh sie den Aussteller des Server-Zertifikat enthalten sollte und nicht einige Client Zertifikat.
  • Fehlendes Setup des Clientzertifikats: Zum Laden der Clientzertifikate sollten Sie load_cert_chain verwenden.
Verwandte Themen