2013-12-18 7 views
6

में डिफ़ॉल्ट सीए हम हमारी कंपनी द्वारा हस्ताक्षर किए एसएसएल के साथ एक और सर्वर से कनेक्ट कर रहे हैं पढ़ने में असमर्थ। हर बार जब कनेक्शन NodeJS किया जाता है UNABLE_TO_VERIFY_LEAF_SIGNATURE फेंकता है। की स्थापना करके मैं पाया है समाधान rejectUnauthorized: झूठी, लेकिन यह हमारे मामले में लागू नहीं है।NodeJS हमारे परीक्षण वातावरण पर ubuntu

प्रमाण पत्र /etc/ssl/प्रमाणपत्र को जोड़ा गया है और या तो /etc/ssl anb /etc/ssl/प्रमाणपत्र, लेकिन कोई नतीजा वातावरण चर SSL_CERT_DIR साथ परीक्षण कर रहे हैं।

इसके अलावा, यह प्रमाण पत्र हमारे फाइलों में कहीं जोड़ सकते हैं और प्रत्येक अनुरोध को जोड़ने के लिए बेहतर नहीं है।

+0

क्या उपयोगकर्ता को नोड चलाने के लिए certs निर्देशिका तक पहुंचने की अनुमति है? यह आमतौर पर हमेशा साधारण चीजें .. – srquinn

+0

यह घटना तब होती है जब उपयोगकर्ता जो नोडजेएस चलाता है वह रूट है और सभी अनुमतियों की आवश्यकता होती है। – viktorstaikov

+0

क्या आपने यह आलेख देखा है? http://blog.gaeremynck.com/fixing-unable_to_verify_leaf_signature/ – srquinn

उत्तर

4

इसका कारण यह है नोड आपके सिस्टम के सीए विन्यास का उपयोग नहीं करता; इसमें its own built-in list of acceptable CAs शामिल है।

आप एक नोड SSL क्लाइंट एक कस्टम सीए को स्वीकार करना चाहते हैं, तो आप 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

तुम भी में अपने प्रमाण पत्र के लिए एक रास्ता जोड़ सकते हैं पीईएम फ़ाइल NODE_EXTRA_CA_CERTS वातावरण चर नोड v7.3.0 के साथ शुरू का उपयोग कर प्रारूप

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

यह किसी भी कोड चांग की जरूरत नहीं को लाभ मिलता है es, बस अपने node प्रक्रिया के वातावरण को बदलें। उम्मीद है की यह मदद करेगा!

संपादित करें:

इसके अलावा बाहर की जाँच --use-openssl-सीए 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 के साथ चलाया और अब नोड मेरे प्रमाणपत्रों को ठीक से पाता है।