2013-12-18 16 views
6

私たちのテスト環境では、当社が署名したSSLを持つ別のサーバに接続しています。接続が確立されるたびに、nodejsが UNABLE_TO_VERIFY_LEAF_SIGNATUREをスローします。 私はrejectUnauthorized:falseを設定することで回避策を見つけましたが、このケースでは使用できません。NodeJSがubuntuでデフォルトのCAを読み取ることができません

証明書は、の/ etc/sslの/ certsのに追加され、の/ etc/sslの/ certsの、ない結果のいずれかの/ etc/sslの ANBする環境変数SSL_CERT_DIRでテストされています。

また、証明書のファイルのどこかに追加してすべての要求に追加することは好ましくありません。

+0

ユーザー実行ノードにcertsディレクトリへのアクセス権がありますか?その通常は常に単純なもの.. – srquinn

+0

これは、NodeJSを実行するユーザーがROOTであり、必要なすべての権限を持っている場合に発生します。 – viktorstaikov

+0

この記事を見たことがありますか? http://blog.gaeremynck.com/fixing-unable_to_verify_leaf_signature/ – srquinn

答えて

4

これは、ノードがシステムのCA構成を使用していないためです。それはits own built-in list of acceptable CAsを含む。

ノードSSLクライアントでカスタムCAを受け入れる場合は、CAの証明書を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

そして、あなたはNode.jsの組み込みリストに頼って、むしろあなたの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

あなたはまた、中にあなたの証明書へのパスを追加することができますノードV7.3.0始まるNODE_EXTRA_CA_CERTS環境変数を使用してPEMファイル形式は

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

これは、任意のコードチャーンを必要としないという利点を有しますあなたのプロセスの環境を変更するだけです。お役に立てれば!

編集:

また、チェックアウト--use-opensslの-CA、私は私の問題を解決するために使用してしまったものだhttps://nodejs.org/api/cli.html#cli_use_openssl_ca_use_bundled_ca

。 .crtファイルを/ usr/local/share/ca-certificatesにコピーした後、sudo update-ca-certificatesを実行してから、--use-openssl-caでnodeを実行すると、ノードは自分の証明書を正しく見つけました。

関連する問題