SSL Sertifikası

PHP SSL: stream_socket_enable_crypto

PHP'de 'stream_socket_enable_crypto(): SSL operation failed with code 1' hatasının nedenleri; php.ini CA ayarı, TLS sürümü ve PHPMailer örneği.

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. localhost veya 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ı

  1. Güncel bir cacert.pem dosyası edinin ve php.ini içinde yolunu verin:
    openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"
    curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
    Ardından web sunucusunu yeniden başlatın.
  2. SMTP'de sunucu adını sertifikadaki ad ile aynı yazın (mail.ornek.com), IP kullanmayın.
  3. 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',
    ]]);
  4. Sertifika süresini ve zincirini openssl s_client -starttls smtp -connect mail.ornek.com:587 ile 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 cafile ile 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.

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ç