SSL Sertifikası

Go SSL: x509 certificate signed by unknown authority

Go'da 'x509: certificate signed by unknown authority' hatası; Docker imajlarında ca-certificates eksikliği ve özel CA ekleme yöntemleri.

Go programınız HTTPS isteğinde x509: certificate signed by unknown authority hatası veriyorsa, sunucu sertifikasının zinciri sistemin güvendiği kök CA'lardan birine bağlanamıyor demektir. Go, kendi kök listesini taşımaz; işletim sisteminin CA deposunu kullanır.

En sık karşılaşılan durumlar

  • Minimal konteyner: scratch veya çok sade imajlarda CA paketi yoktur.
  • Özel/kurumsal CA: Dahili servisler kendi CA'sıyla imzalanmıştır.
  • Self-signed sertifika kullanan geliştirme ortamı.
  • Eksik ara sertifika: Sunucu zinciri tamamlamıyor.

Çözüm adımları

  1. Docker imajınıza CA paketini ekleyin. Alpine tabanlı imajda:
    RUN apk add --no-cache ca-certificates
    Debian tabanlıda apt-get install -y ca-certificates. Çok aşamalı derlemede /etc/ssl/certs/ca-certificates.crt dosyasını son imaja kopyalayabilirsiniz.
  2. Özel kök CA'yı sistem deposuna ekleyin ve update-ca-certificates çalıştırın.
  3. Sistem deposunu değiştiremiyorsanız Go'da kendi havuzunuzu oluşturun:
    pool, _ := x509.SystemCertPool()
    if pool == nil { pool = x509.NewCertPool() }
    pem, _ := os.ReadFile("kok-ca.pem")
    pool.AppendCertsFromPEM(pem)
    client := &http.Client{Transport: &http.Transport{
        TLSClientConfig: &tls.Config{RootCAs: pool},
    }}
  4. Alternatif olarak SSL_CERT_FILE veya SSL_CERT_DIR ortam değişkenlerini kullanın (Linux'ta Go bunları dikkate alır).

Kaçınılacak kısayol

InsecureSkipVerify: true hatayı kaldırır, ancak sertifika doğrulamasını tamamen devre dışı bırakır; üretimde kullanmayın. Halka açık bir sitede hata alıyorsanız sunucu zincirini SSL denetleme aracıyla inceleyin; eksik ara sertifika sunucu tarafında tamamlanmalıdır. Sertifika seçenekleri için SSL sertifikaları sayfası kullanılabilir.

Ek notlar

  • Çok aşamalı Dockerfile'da derleme imajında çalışan program, son imajda CA paketi olmadığı için hata verebilir.
  • macOS ve Windows'ta Go sistemin kök deposunu kullandığından hata genellikle kurumsal proxy kaynaklıdır.
  • Test sunucusu için self-signed sertifika yerine yerel bir CA kurup kökünü RootCAs'a eklemek daha güvenli bir alışkanlıktır.

Bu yaklaşım, geliştirme ile üretim arasındaki doğrulama farkını da azaltır.

Özet: Go hatası çoğunlukla ortam kaynaklıdır; CA paketini imaja eklemek ya da özel kökü açıkça tanıtmak yeterlidir.

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ç