2013-12-18 11 views
6

W naszym środowisku testowym łączymy się z innym serwerem z SSL podpisanym przez naszą firmę. Za każdym razem, gdy połączenie jest nawiązywane, nodejs wyrzuca UNABLE_TO_VERIFY_LEAF_SIGNATURE. Znalazłem obejścia, ustawiając rejectUnauthorized: false, ale nie jest to możliwe w naszym przypadku.NodeJS nie może odczytać domyślnych urzędów certyfikacji w ubuntu

Certyfikaty są dodawane do /itp/SSL/certs i zbadano ze zmienną środowiska SSL_CERT_DIR być albo /itp/SSL anb /etc/SSL/certs, ale bez rezultatu.

Ponadto nie jest zalecane dodawanie gdzieś w naszych plikach certyfikatu i dodawanie go do każdego żądania.

+0

Czy działający użytkownik węzła ma uprawnienia dostępu do katalogu certyfikatów? Zwykle zawsze są to proste rzeczy. – srquinn

+0

Występuje zdarzenie, gdy użytkownik uruchamiający NodeJS jest ROOT i ma wszystkie wymagane uprawnienia. – viktorstaikov

+0

Widziałeś ten artykuł? http://blog.gaeremynck.com/fixing-unable_to_verify_leaf_signature/ – srquinn

Odpowiedz

4

Dzieje się tak, ponieważ węzeł nie używa konfiguracji systemu CA; obejmuje its own built-in list of acceptable CAs.

Jeśli chcesz, aby klient SSL węzła akceptował niestandardowy urząd certyfikacji, musisz przekazać certyfikat urzędu certyfikacji w wersji ca option.

// do something like this when your app starts up: 
fs.readFile('/path/to/ca.pem', function(err, cert) { 
    if (err) ... 
    else certBuffer = cert; 
}); 

// then when you make requests... 
https.request({ 
    hostname: 'example.com', 
    port: 443, 
    path: '/', 
    method: 'GET', 
    ca: certBuffer 
}, ...); 
1

A jeśli nie chcesz polegać na node.js wbudowanych lista, a raczej korzystać z listy debian/Ubuntu:

var CAs = fs.readFileSync('/etc/ssl/certs/ca-certificates.crt').toString().split(/(?=-----BEGIN CERTIFICATE-----)/); 

// then when you make requests... 
https.request({ ..., ca: CAs}, ...); 
0

Można również dodać ścieżkę do listy certyfikatów w Format pliku PEM pomocą NODE_EXTRA_CA_CERTS zmienną środowiskową począwszy od węzła v7.3.0

https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

ta ma tę zaletę, że nie wymaga żadnego kodu chang es, po prostu zmień środowisko swojego procesu node. Mam nadzieję że to pomoże!

Edit:

Również sprawdzić --use-openssl-ca https://nodejs.org/api/cli.html#cli_use_openssl_ca_use_bundled_ca

To, co skończyło się rozwiązać mój problem. Skopiowałem moje pliki .crt do/usr/local/share/ca-certificates, a następnie uruchomiłem sudo update-ca-certificates, a następnie uruchomiłem węzeł za pomocą --use-openssl-ca, a teraz węzeł poprawnie odnajduje moje certyfikaty.

Powiązane problemy