2013-06-24 23 views
5

Próbuję sprawić, aby węzeł https pracował z certyfikatem samopodpisanym z żądaniem przychodzenia na adres IP zamiast nazwą DNS. Używam tego kodunodejs - UNABLE_TO_VERIFY_LEAF_SIGNATURE z certyfikatem z podpisem własnym

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

var cert = fs.readFileSync(__dirname + '/cert.pem'); 
var key = fs.readFileSync(__dirname + '/key.pem'); 

var netServer = new tls.Server(options = { key: key, cert: cert }); 
var port = 54321; 

netServer.listen(port); 

netServer.on('secureConnection', function(socket) { 
    socket.end('heyyyoooo'); 
}); 

var client = tls.connect(port, 'localhost', { 
    ca: [ cert ], 
    rejectUnauthorized: true 
}); 

client.on('data', function(data) { 
    console.log(data.toString()); 
    process.exit(); 
}); 

Współpracuje z cert generowanego przez these instructions (bez tematu Names alternatywna) Gdy wniosek zostanie wydane localhost, jednak kiedy zastąpić go 127.0.0.1, mam Error: Hostname/IP doesn't match certificate's altnames. Dlatego stworzyłem nowy certyfikat generujący pod numerem subjectAltName. Openssl odczytuje go jako:

Certificate: 
     Data: 
      Version: 3 (0x2) 
      Serial Number: 11107838472034892631 (0x9a26f83d0c0ebb57) 
     Signature Algorithm: sha1WithRSAEncryption 
      Issuer: CN=127.0.0.1 
      Validity 
       Not Before: Jun 24 09:51:56 2013 GMT 
       Not After : Jun 22 09:51:56 2023 GMT 
      Subject: CN=127.0.0.1 
      Subject Public Key Info: 
       Public Key Algorithm: rsaEncryption 
        Public-Key: (1024 bit) 
        Modulus: *skipped* 
        Exponent: 65537 (0x10001) 
      X509v3 extensions: 
       X509v3 Key Usage: 
        Key Encipherment, Data Encipherment 
       X509v3 Extended Key Usage: 
        TLS Web Server Authentication 
       X509v3 Subject Alternative Name: 
        DNS:localhost, IP Address:127.0.0.1 
     Signature Algorithm: sha1WithRSAEncryption 
*skipped* 

Więc SAN zostały prawidłowo utworzone. Teraz otrzymuję Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE, jak mogę to zrobić?

Odpowiedz

0

Spróbuj tego:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; 
+1

który pracował dla mnie na OS X. – Nick

+0

@Nick, faktycznie, może pracować na dowolnym systemie operacyjnym. – Formiga

+6

Należy pamiętać, że wyłącza to bardzo ważne kontrole bezpieczeństwa. – oLeduc

Powiązane problemy