มันอาจเป็นเรื่องล่อลวงให้ทำrejectUnauthorized: false
หรือprocess.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
ไม่ทำมัน! มันทำให้คุณพบกับมนุษย์ในการโจมตีระดับกลาง
คำตอบอื่น ๆ นั้นถูกต้องในประเด็นที่ว่าใบรับรองของคุณนั้น "ลงนามโดย CA ตัวกลาง" มีวิธีแก้ปัญหาที่ง่ายซึ่งไม่ต้องใช้ssl-root-cas
ไลบรารี่ของบุคคลที่สามเช่นหรือเพิ่ม CAs ใด ๆ ลงในโหนด
ไคลเอ็นต์ https ส่วนใหญ่ในตัวเลือกการสนับสนุนโหนดที่อนุญาตให้คุณระบุ CA ต่อคำขอซึ่งจะแก้ไขUNABLE_TO_VERIFY_LEAF_SIGNATURE
ได้ นี่คือตัวอย่างง่ายๆโดยใช้https
โมดูลในตัวของโหนด
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
})
อย่างไรก็ตามหากคุณสามารถกำหนดการตั้งค่า ssl ในเซิร์ฟเวอร์การโฮสต์ของคุณได้ทางออกที่ดีที่สุดคือการเพิ่มใบรับรองระดับกลางให้กับผู้ให้บริการโฮสต์ของคุณ ด้วยวิธีนี้ผู้ร้องขอของลูกค้าไม่จำเป็นต้องระบุ CA เนื่องจากจะรวมอยู่ในเซิร์ฟเวอร์เอง ฉันใช้ namecheap + heroku เป็นการส่วนตัว เคล็ดลับสำหรับผมคือการสร้างไฟล์ .crt cat yourcertificate.crt bundle.ca-bundle > server.crt
หนึ่งที่มี ฉันเปิดไฟล์นี้และเพิ่มบรรทัดใหม่หลังจากใบรับรองแรก คุณสามารถอ่านเพิ่มเติมได้ที่
https://www.namecheap.com/support/knowledgebase/article.aspx/10050/33/installing-an-ssl-certificate-on-heroku-ssl