Nó có thể rất hấp dẫn để làm rejectUnauthorized: false
hoặc process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
nhưng đừng làm điều đó! Nó phơi bày bạn với người đàn ông trong các cuộc tấn công giữa.
Các câu trả lời khác đều đúng ở chỗ vấn đề nằm ở chỗ chứng chỉ của bạn "được ký bởi một CA trung gian". Có một giải pháp dễ dàng cho vấn đề này, một giải pháp không yêu cầu thư viện bên thứ ba như ssl-root-cas
hoặc tiêm thêm bất kỳ CA nào vào nút.
Hầu hết các máy khách https trong các tùy chọn hỗ trợ nút cho phép bạn chỉ định CA theo yêu cầu, sẽ giải quyết UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Đây là một ví dụ đơn giản sử dụng https
mô đun int-int của nút .
import https from 'https';
const options = {
host: '<your host>',
defaultPort: 443,
path: '<your path>',
// assuming the bundle file is co-located with this file
ca: readFileSync(__dirname + '/<your bundle file>.ca-bundle'),
headers: {
'content-type': 'application/json',
}
};
https.get(options, res => {
// do whatever you need to do
})
Tuy nhiên, nếu bạn có thể định cấu hình cài đặt ssl trong máy chủ lưu trữ của mình, giải pháp tốt nhất sẽ là thêm chứng chỉ trung gian cho nhà cung cấp dịch vụ lưu trữ của bạn. Bằng cách đó, người yêu cầu khách hàng không cần chỉ định CA, vì nó được bao gồm trong chính máy chủ. Cá nhân tôi sử dụng namecheap + heroku. Mẹo cho tôi là tạo một tệp .crt với cat yourcertificate.crt bundle.ca-bundle > server.crt
. Sau đó tôi đã mở tập tin này và thêm một dòng mới sau chứng chỉ đầu tiên. Bạn có thể đọc thêm tại
https://www.namecheap.com/support/ledgeledridease/article.aspx/10050/33/installing-an-ssl-cert ve-on-heroku-ssl