SSL Sertifikası

Node.js SSL: unable to verify certificate

'Unable to verify the first certificate' çoğunlukla sunucunun ara sertifikayı göndermemesinden çıkar. Doğru çözüm ile yanlış kestirmeyi ayırıyoruz.

Node.js HTTPS isteğinde UNABLE_TO_VERIFY_LEAF_SIGNATURE veya "unable to verify the first certificate" hatası, sunucunun gönderdiği sertifikanın güvenilen bir CA'ya kadar zincirlenemediğini gösterir. Tarayıcı aynı siteyi açabilirken Node'un hata vermesi tipik işarettir; çünkü tarayıcılar eksik ara sertifikayı kendileri tamamlayabilir, Node tamamlamaz.

Asıl neden

Hedef sunucu yalnızca kendi sertifikasını gönderiyor, ara (intermediate) sertifikayı eklemiyor. Sorun istemci kodunda değil, karşı sunucunun yapılandırmasındadır.

Teşhis

openssl s_client -connect api.ornek.com:443 -servername api.ornek.com -showcerts

Çıktıda yalnızca bir sertifika görüyorsanız ve sonda Verify return code: 21 (unable to verify the first certificate) yazıyorsa zincir eksiktir.

Çözümler

  1. Doğru çözüm: Sunucu tarafında tam zinciri (fullchain) yapılandırın. Nginx'te ssl_certificate dosyasına sunucu sertifikasının ardından ara sertifikaları ekleyin.
  2. Sunucuya erişiminiz yoksa ara sertifikayı istemciye tanıtın:
    const https = require('https');
    const fs = require('fs');
    const agent = new https.Agent({ ca: fs.readFileSync('ara-ve-kok.pem') });
    https.get('https://api.ornek.com', { agent }, res => console.log(res.statusCode));
    
  3. Tüm süreç için ek CA dosyası: NODE_EXTRA_CA_CERTS=/yol/ara-ve-kok.pem node app.js.
  4. Kurumsal ağda TLS denetimi yapan proxy varsa, o kurumun kök sertifikasını aynı yöntemle ekleyin.

Yapmayın

NODE_TLS_REJECT_UNAUTHORIZED=0 veya rejectUnauthorized: false doğrulamayı tamamen kapatır ve ortadaki adam saldırısına kapı açar; yalnızca yerel geliştirmede geçici olarak kullanılabilir, üretimde kullanmayın.

Kendi sunucunuzun zincirini SSL denetleme aracıyla sınayın; sertifika ihtiyacınız için SSL sertifikaları sayfasına göz atabilirsiniz.

Ek ipuçları

Sorun yalnızca belli bir makinede çıkıyorsa, o makinenin Node sürümünü ve CA paketini karşılaştırın: Node kendi gömülü CA listesini kullanır, işletim sisteminin listesini kullanmaz. Bu yüzden sistemde güvenilen bir CA Node'da bilinmiyor olabilir; NODE_EXTRA_CA_CERTS bu durumda pratik bir çözümdür.

Bu makale faydalı oldu mu?

Makale Ara

Sunucu SSL Hataları

Yardıma mı İhtiyacınız Var?

Aradığınızı bulamadıysanız destek ekibimiz size yardımcı olabilir.

Destek Talebi Aç