curl: (60) SSL certificate problem: unable to get local issuer certificate hatası, cURL'ün sunucu sertifikasının vericisini (issuer) yerel CA paketinde bulamadığını bildirir. Sebep ya istemci makinedeki CA paketi ya da sunucunun eksik zincir göndermesidir.
Nedeni ayırt etme
- Aynı adrese başka bir makineden veya tarayıcıdan sorunsuz erişiliyorsa sorun büyük olasılıkla yerel CA paketindedir.
- Hiçbir istemci güvenmiyorsa sunucu ara sertifikayı göndermiyor olabilir. Kontrol için:
curl -v https://ornek.com openssl s_client -connect ornek.com:443 -servername ornek.com -showcerts - Çıktıda yalnızca bir sertifika varsa zincir eksiktir.
Çözümler
- Sunucu tarafı: Sertifikaya ara sertifikaları ekleyip (fullchain) web sunucusunu yeniden yükleyin. Kalıcı ve doğru çözüm budur.
- Linux istemci: CA paketini güncelleyin (
update-ca-certificatesveya dağıtıma uygun paket:ca-certificates). - Özel CA: Kök sertifikayı açıkça verin:
curl --cacert kok-ca.pem https://ornek.com - Ortam değişkeni:
CURL_CA_BUNDLEveyaSSL_CERT_FILEile paket dosyasını gösterin. - PHP cURL:
php.iniiçinde CA paketi yolunu tanımlayın:curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem" openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"
Uyarı ve önleme
curl -k (veya --insecure) doğrulamayı atlar; teşhis amaçlı kısa testlerde işe yarar, üretim betiklerinde bırakılmamalıdır. Eksik zincir sorunlarını önlemek için sertifikayı yayına aldıktan sonra SSL denetleme aracıyla tam zincir kontrolü yapın. Yeni sertifika gerekiyorsa SSL sertifikaları sayfasına bakabilirsiniz.
Ek notlar
- Windows'ta cURL'ün kullandığı arka uca göre (Schannel veya OpenSSL) sistem deposu ya da CA dosyası kullanılır;
curl -Vile hangisinin kullanıldığına bakın. - PHP'de CA dosyasını güncel tutmak için dosyayı düzenli olarak yenileyin; eski dosya yeni CA'ları tanımaz.
- Hata yalnızca belirli bir siteye özgüyse, o sitenin zincirini öncelikle şüpheli sayın.
Sonuç olarak yerel bir betikte çalışan çözüm her zaman sunucudaki eksikliği kapatmaz; ikisini ayrı ayrı doğrulayın.
Özet: hata 60 bir güven sorunudur; ara sertifika eksikliği ve eski CA paketi en yaygın iki nedendir.