Node.js, sistem deposunu değil kendi içine gömülü CA listesini kullanır. Bu yüzden tarayıcıda açılan bir adres Node uygulamasında hata verebilir. Tipik hata kodları UNABLE_TO_VERIFY_LEAF_SIGNATURE, UNABLE_TO_GET_ISSUER_CERT_LOCALLY, SELF_SIGNED_CERT_IN_CHAIN ve CERT_HAS_EXPIRED'tir.
Hata neden oluşur?
- Bağlanılan sunucu ara sertifikayı göndermiyor.
- Kurum içi veya özel CA'nın kökü Node'un listesinde yok.
- Kurumsal proxy, trafiği kendi sertifikasıyla yeniden imzalıyor.
- Kullanılan Node sürümü eski ve yeni kökleri içermiyor.
Çözüm 1: Ek CA dosyası tanıtmak
Tüm uygulama için ortam değişkeniyle ek kök ekleyebilirsiniz; bu, yerleşik listenin yerine geçmez, ona eklenir:
export NODE_EXTRA_CA_CERTS=/etc/ssl/kurum-ca.pem
node uygulama.js
Windows PowerShell'de: $env:NODE_EXTRA_CA_CERTS="C:\sertifikalar\kurum-ca.pem"
Çözüm 2: İstek bazında CA vermek
const https = require('https');
const fs = require('fs');
const agent = new https.Agent({
ca: fs.readFileSync('/etc/ssl/kurum-ca.pem')
});
https.get('https://api.ornek.com', { agent }, (res) => {
console.log(res.statusCode);
});
Dikkat: ca seçeneği verildiğinde yerleşik liste kullanılmaz; genel adreslere de bağlanacaksanız ikisini birleştirmeniz gerekir.
Çözüm 3: Sunucuyu düzeltmek
UNABLE_TO_VERIFY_LEAF_SIGNATURE genellikle eksik ara sertifika demektir. Sorunu istemciyi gevşeterek değil, sunucuya ara sertifikayı ekleyerek çözmek en doğrusudur. Durumu openssl s_client -showcerts veya SSL kontrol aracıyla doğrulayın.
Yapılmaması gereken
NODE_TLS_REJECT_UNAUTHORIZED=0 değişkeni tüm sertifika doğrulamasını kapatır ve bağlantıyı ortadaki adam saldırılarına açar; yalnızca yerel, geçici testlerde düşünülmelidir. Yeni bir sertifika için SSL sertifikaları sayfasına göz atabilirsiniz.