SSL Sertifikası

PHP ile SSL API Entegrasyonu

PHP cURL ile güvenli SSL API istemcisi: örnek fonksiyon, TLS doğrulamasını kapatmama ve 'unable to get local issuer certificate' hatasının çözümü.

PHP ile SSL API'sine bağlanmanın en sağlam yolu, cURL eklentisiyle HTTPS isteği yapıp yanıtı JSON olarak çözmektir. Aşağıdaki kalıp herhangi bir REST tabanlı sertifika API'sine uyarlanabilir.

Ön koşullar

  • PHP 7.4 veya üzeri, curl ve json eklentileri etkin
  • API anahtarı ortam değişkeninde (kaynak kodda değil)
  • Sunucunun CA paketini güncel tutması (TLS doğrulaması için)

Temel istemci fonksiyonu

<?php
function api_istek(string $yontem, string $url, array $veri = []): array {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST  => $yontem,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 30,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_HTTPHEADER     => [
            'Authorization: Bearer ' . getenv('SSL_API_TOKEN'),
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS     => $veri ? json_encode($veri) : null,
    ]);
    $yanit = curl_exec($ch);
    if ($yanit === false) {
        throw new RuntimeException('Baglanti hatasi: ' . curl_error($ch));
    }
    $kod = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    $json = json_decode($yanit, true);
    if ($kod >= 400) {
        throw new RuntimeException("API hatasi ($kod)");
    }
    return $json ?? [];
}

Önemli noktalar

  1. TLS doğrulamasını kapatmayın. CURLOPT_SSL_VERIFYPEER => false kısa yoldur ama güvenliği ortadan kaldırır.
  2. Zaman aşımı koyun; yanıt vermeyen API sayfanızı kilitlemesin.
  3. Hata yanıtlarını kaydedin ama anahtarları ve CSR içeriğini günlüğe yazmayın.
  4. Sipariş gibi işlemleri formdan doğrudan değil, doğrulanmış sunucu taraflı akıştan tetikleyin.

Sık sorunlar

  • SSL certificate problem: unable to get local issuer certificate hatası genellikle güncel olmayan CA paketinden gelir; curl.cainfo ayarını güncel bir pakete yönlendirin.
  • JSON gövdesinde Türkçe karakter sorununda JSON_UNESCAPED_UNICODE kullanın.

CSR üretimi için CSR oluşturucuyu, hata ayıklama için SSL sorun gidericiyi kullanabilirsiniz.

Yanıtı güvenle işlemek

API'den dönen değerleri doğrudan HTML çıktısına yazmayın; htmlspecialchars() ile kaçışlayın. Veritabanına kaydederken hazırlanmış ifadeler (PDO prepared statements) kullanın. Sertifika içeriği gibi uzun metinleri TEXT sütununda saklayın ve özel anahtarı veritabanına yazmaktan kaçının.

Bu makale faydalı oldu mu?

Makale Ara

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

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

Destek Talebi Aç