2016-02-07 24 views
5

Tôi có thư mục chứa gói chứng chỉ, tập lệnh Python và tập lệnh Node. Cả hai tập lệnh tạo yêu cầu GET cho cùng một URL và được cung cấp cùng một gói chứng chỉ. Các kịch bản Python thực hiện yêu cầu như mong đợi tuy nhiên kịch bản nút ném lỗi này:Không thể xác minh chứng chỉ đầu tiên

{ [Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }

Các Python script (Python 3.4.3 và requests thư viện):

import requests 
print(requests.get(url, verify='/tmp/cert/cacert.pem')) 

kịch bản nút (Nút 4.2.6 và thư viện request):

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

request.get({ 
    url: url, 
    agentOptions: { 
     ca: fs.readFileSync('/tmp/cert/cacert.pem') 
    } 
}, function (error, response, body) { 
    if (error) { 
     console.log(error); 
    } else { 
     console.log(body); 
    } 
}); 

Cả hai đều đang sử dụng cùng một phiên bản OpenSSL:

$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)' 
OpenSSL 1.0.2e-fips 3 Dec 2015 

$ node -pe process.versions.openssl 
1.0.2e 

Tôi không tin rằng sự cố xảy ra với gói chứng chỉ và tôi không muốn tắt xác minh máy chủ trong Nút.

Không ai biết tại sao Node lại ném lỗi này?

Trả lời

2

Các documentation mô tả các tùy chọn ca như sau:

ca: A string, Buffer or array of strings or Buffers of trusted certificates in PEM format. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections.

Vì vậy, nó không mong đợi một bó CA. Tuy nhiên, việc sửa chữa rất đơn giản, chỉ cần chia nhóm như sau:

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

var certs = fs.readFileSync('/tmp/cert/cacert.pem').toString().split("\n\n"); 

request.get({ 
    url: url, 
    agentOptions: { 
     ca: certs 
    } 
}, function (error, response, body) { 
    if (error) { 
     console.log(error); 
    } else { 
     console.log(body); 
    } 
}); 
0

Có thể bạn có thể sử dụng mô-đun này để khắc phục sự cố, bằng cách tải xuống chứng chỉ thường được trình duyệt sử dụng.

https://www.npmjs.com/package/ssl-root-cas

Các vấn đề liên quan