Node.js'te Error: self signed certificate ya da code: 'DEPTH_ZERO_SELF_SIGNED_CERT' hatası, bağlandığınız sunucunun sertifikasını herhangi bir CA'nın değil, sertifikanın kendisinin imzaladığını bildirir. "Depth zero" ifadesi sorunun zincirin en başındaki sunucu sertifikasında olduğunu belirtir.
Ne zaman ortaya çıkar
- Test/geliştirme sunucusu
openssl req -x509ile üretilmiş sertifika kullanıyor. - Kurum içi bir hizmet kendi özel CA'sından imzalı sertifika kullanıyor.
- TLS denetimi yapan bir proxy sertifikayı değiştirip kendi kök sertifikasıyla imzalıyor.
- Üretim sunucusunda yanlışlıkla kurulum öncesi geçici sertifika kalmış.
Güvenli çözüm yolları
- Üretim: Herkese açık bir CA'dan alınmış sertifika kurun; hata kökünden kalkar ve istemcilerde ek ayar gerekmez. Seçenekler için SSL sertifikaları.
- Kurum içi hizmet: Kendi CA sertifikanızı istemciye tanıtın:
NODE_EXTRA_CA_CERTS=/etc/kurum/kok-ca.pem node app.js - Tek bir bağlantı için:
Burada sertifika dosyasını doğrudan güvenilir olarak vermiş olursunuz; yalnızca o sunucuya sabitlenir.const https = require('https'); const fs = require('fs'); const agent = new https.Agent({ ca: fs.readFileSync('kendinden-imzali.crt') }); - Yerel geliştirmede
mkcertgibi araçlarla yerel CA kurmak, doğrulamayı kapatmaktan daha güvenlidir.
Kaçınılacak kestirme
rejectUnauthorized: false veya NODE_TLS_REJECT_UNAUTHORIZED=0 tüm doğrulamayı kapatır; bu ayarı kodda bırakmak üretimde ciddi bir açık yaratır. Sertifikanızın durumunu SSL denetleme aracıyla doğrulayın.
Ek ipuçları
Test sertifikası üretirken subjectAltName alanını mutlaka ekleyin; yalnızca CN ile üretilen sertifikalar modern istemcilerde ad uyuşmazlığı hatasına yol açar. Sertifika geliştirme ortamından üretime geçerken yapılandırma dosyalarında ca veya rejectUnauthorized gibi geçici ayarların kalmadığını kod incelemesinde kontrol edin.