PHP'de stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed uyarısı; SMTP (PHPMailer), IMAP veya file_get_contents('https://...') gibi akış tabanlı bağlantılarda sertifika doğrulanamadığında görülür.
Nedenler
- PHP'nin CA paketi tanımlı değil (Windows/XAMPP'te sık).
- Sunucu sertifikası, bağlanılan ana bilgisayar adıyla uyuşmuyor (ör.
localhostveya IP ile bağlanma). - Posta sunucusunun sertifikası self-signed veya süresi dolmuş.
- Sunucu ile PHP/OpenSSL arasında ortak TLS sürümü yok.
Çözüm adımları
- Güncel bir
cacert.pemdosyası edinin vephp.iniiçinde yolunu verin:
Ardından web sunucusunu yeniden başlatın.openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem" curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem" - SMTP'de sunucu adını sertifikadaki ad ile aynı yazın (
mail.ornek.com), IP kullanmayın. - Belirli bir CA ve ad doğrulaması için akış bağlamı kullanın:
$ctx = stream_context_create(['ssl' => [ 'cafile' => '/yol/kok-ca.pem', 'verify_peer' => true, 'peer_name' => 'mail.ornek.com', ]]); - Sertifika süresini ve zincirini
openssl s_client -starttls smtp -connect mail.ornek.com:587ile kontrol edin.
Kaçınılması gereken çözüm
İnternette sıkça önerilen verify_peer => false ayarı uyarıyı kaldırır ama bağlantıyı doğrulamasız bırakır; e-posta kimlik bilgilerinizin ele geçirilmesine yol açabilir. Kalıcı çözüm sunucuya geçerli, tam zincirli bir sertifika kurmaktır. Zinciri doğrulamak için SSL denetleme aracını kullanın; sertifika ihtiyacınız için SSL sertifikaları sayfasına bakın.
Ek notlar
- Yerel geliştirmede kendinden imzalı sertifikayla çalışıyorsanız, sertifikayı güvenilir kök olarak
cafileile tanıtmak yine de doğrulamayı açık tutar. - PHP sürümünüz çok eskiyse TLS 1.2 desteği sınırlı olabilir; PHP ve OpenSSL'i güncelleyin.
- Shared hosting'de php.ini düzenleyemiyorsanız barındırma panelindeki PHP seçeneklerine bakın veya sağlayıcıya yazın.
Değişikliğin etkili olduğunu phpinfo() çıktısındaki openssl.cafile satırından doğrulayabilirsiniz.
Özet: hata 1 çoğunlukla CA paketi, ad uyuşmazlığı veya geçersiz sertifikadan kaynaklanır; doğrulamayı kapatmak yerine nedeni giderin.