curl SSL, TLS ve Proxy Yapılandırma Rehberi

curl'da HTTPS sertifikalarını, TLS sürümlerini, proxy'leri ve özel DNS çözümlemesini yapılandırmak, güvenli API iletişimi, CI/CD pipeline'ları ve ağ sorunlarını hata ayıklamak için vazgeçilmezdir. Bu rehber, yerel geliştirmede sertifika denetimini -k ile devre dışı bırakmaktan --cert ile karşılıklı TLS kurulumuna ve trafiği SOCKS5 proxy'ler üzerinden yönlendirmeye kadar her SSL, TLS, proxy ve ağ bayrağını kapsar. Her seçenek net bir açıklama, güvenlik değerlendirmeleri ve kopyalamaya hazır bir örnek içerir.

SSL ve Proxy Bayrakları Hızlı Referans

-kSSL/TLS

Güvensiz bağlantılara izin ver — tüm SSL doğrulamasını atla

--cacertSSL/TLS

Sunucu sertifikasını belirli bir CA paketine karşı doğrula

--certSSL/TLS

Karşılıklı TLS kimlik doğrulaması için istemci sertifikası sağla

--keySSL/TLS

İstemci sertifikası için özel anahtar dosyasını sağla

--tlsv1.2SSL/TLS

Bağlantı için TLS sürüm 1.2 veya üstünü kullan

--tlsv1.3SSL/TLS

Bağlantı için TLS sürüm 1.3 veya üstünü kullan

--ssl-reqdSSL/TLS

Bağlantı için SSL/TLS gerekli kıl (mevcut değilse başarısız ol)

--ciphersSSL/TLS

Bağlantı için hangi SSL şifrelerinin kullanılacağını belirt

--cert-typeSSL/TLS

İstemci sertifika türünü belirt (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Sunucu açık anahtarını sabitle ve doğrula (HPKP tarzı)

-xProxy

Tüm trafiği belirtilen proxy sunucusu üzerinden yönlendir

Bağlantıyı SOCKS5 proxy üzerinden yönlendir

Proxy sunucusu için kullanıcıadı:parola sağla

Proxy üzerinden geçmemesi gereken hostların listesi

--socks5-hostnameProxy

DNS çözümlemesi proxy üzerinden yapılan SOCKS5 proxy

--proxy-cacertProxy

HTTPS proxy'nin kendisini doğrulamak için CA sertifikası

Belirli bir host:port çiftini özel bir IP adresine eşle

URL'nin belirttiğinden farklı bir host:port'a bağlan

--local-port

Bağlantı için yerel port numarasını veya aralığını ayarla

--interface

Bağlantıyı belirli bir ağ arayüzüne bağla

--dns-servers

Sistem varsayılanları yerine özel DNS sunucuları kullan (c-ares)

curl -k: SSL Sertifika Hatalarını Yoksay

Ne yapar
-k (veya --insecure) bayrağı tüm SSL/TLS sertifika doğrulamasını devre dışı bırakır. curl, sunucu sertifikasının güvenilir bir CA tarafından imzalanıp imzalanmadığını, ana bilgisayar adının eşleşip eşleşmediğini veya sertifikanın süresinin dolup dolmadığını kontrol etmez.
Ne zaman kullanılır
Kendinden imzalı sertifikalı yerel geliştirme veya test ortamları için yalnızca kullanın. Hazırlık/üretim ortamları için bunun yerine --cacert ile gerçek CA sertifikasını kullanın — hem daha güvenli hem de daha açıktır.
$ curl -k https://localhost:8443/api/health

Üretim betiklerinde veya CI/CD pipeline'larında -k kullanmayın. Tüm sertifika doğrulamasını devre dışı bırakır ve bağlantınızı ortadaki adam saldırılarına karşı savunmasız hale getirir. Bunun yerine belirli bir CA'yı güvenmek için --cacert kullanın.

curl --cacert: Özel CA Sertifikası Kullan

Ne yapar
--cacert bayrağı, curl'a sunucunun SSL sertifikasını sistemin varsayılan güven deposu yerine PEM formatında belirli bir CA (Sertifika Yetkilisi) paket dosyasına karşı doğrulamasını söyler.
Ne zaman kullanılır
Sunucunuz sistem güven deposunda olmayan özel veya dahili bir CA tarafından imzalanmış sertifika kullanıyorken kullanın. Bu, kurumsal ortamlarda, Kubernetes kümelerinde ve dahili PKI ile Docker yapılandırmalarında yaygındır.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: İstemci Sertifikası (Karşılıklı TLS)

Ne yapar
--cert bayrağı, karşılıklı TLS (mTLS) için istemci tarafı sertifikası sağlar. mTLS'de hem sunucu hem de istemci, birbirlerinin kimliğini doğrulamak için sertifika sunar. Sertifika dosyası PEM veya PKCS#12 formatında olmalıdır.
Ne zaman kullanılır
Sunucu istemci sertifika kimlik doğrulaması talep ettiğinde gereklidir — bankacılık API'leri, devlet hizmetleri, IoT cihaz iletişimi ve sıfır güven mimarilerinde yaygındır. Anahtar sertifika dosyasına gömülü değilse her zaman --key ile eşleştirin.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: İstemci Sertifikası Özel Anahtarı

Ne yapar
--key bayrağı, --cert ile sağlanan istemci sertifikasıyla eşleşen özel anahtar dosyasını belirtir. Anahtar sertifikayla eşleşmelidir. Anahtar parola korumalıysa, curl parola isteyecektir (veya --pass kullanın).
Ne zaman kullanılır
Her zaman --cert ile birlikte kullanın. Özel anahtar zaten sertifika dosyasına gömülüyse (PKCS#12 / .p12 dosyalarında yaygın), --key parametresini atlayabilirsiniz.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: Minimum TLS 1.2 Zorla

Ne yapar
--tlsv1.2 bayrağı, curl'u SSL/TLS el sıkışması için kabul edilebilir minimum sürüm olarak TLS 1.2 kullanmaya zorlar. Eski protokoller (TLS 1.0, 1.1, SSLv3) reddedilir.
Ne zaman kullanılır
Minimum güvenlik standardı uygulamak için kullanın. TLS 1.2, PCI-DSS uyumluluğu için gereklidir ve tüm modern sunucular tarafından desteklenir. Çoğu modern curl derlemesi zaten varsayılan olarak TLS 1.2+ kullanır, ancak bu bayrak bunu açıkça belirtir.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Minimum TLS 1.3 Zorla

Ne yapar
--tlsv1.3 bayrağı, curl'u en hızlı ve en güvenli TLS sürümü olan TLS 1.3 kullanmaya zorlar. TLS 1.3, el sıkışmasındaki ekstra gidiş-dönüşü ortadan kaldırır (0-RTT desteği) ve tüm eskimiş şifre takımlarını kaldırır.
Ne zaman kullanılır
Sunucunun TLS 1.3'ü desteklediğini bildiğinizde ve en iyi performans ve güvenliği istediğinizde kullanın. Not: TLS 1.3, OpenSSL 1.1.1+ veya uyumlu bir TLS kütüphanesi gerektirir. Henüz tüm sunucular desteklememektedir.
$ curl --tlsv1.3 https://modern-api.example.com/data

Ek SSL/TLS Seçenekleri

--ssl-reqd

Bağlantı için SSL/TLS gerekli kıl (mevcut değilse başarısız ol)

--ciphers

Bağlantı için hangi SSL şifrelerinin kullanılacağını belirt

--cert-type

İstemci sertifika türünü belirt (PEM, DER, ENG, P12)

--pinnedpubkey

Sunucu açık anahtarını sabitle ve doğrula (HPKP tarzı)

curl -x: HTTP/HTTPS Proxy Kullan

Ne yapar
-x (veya --proxy) bayrağı, tüm curl trafiğini belirtilen proxy sunucusu üzerinden yönlendirir. Format: [protocol://]host[:port]. Desteklenen proxy protokolleri: HTTP, HTTPS, SOCKS4, SOCKS5.
Ne zaman kullanılır
Kurumsal proxy sunucuları, Fiddler, Charles veya mitmproxy gibi araçlarla hata ayıklama, coğrafi kısıtlamaları test etme veya doğrudan internet erişimi olmadığında kullanın. Alternatif olarak http_proxy / https_proxy ortam değişkenlerini ayarlayabilirsiniz.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: SOCKS5 Proxy Kullan

Ne yapar
--socks5 bayrağı, curl'a TCP bağlantısı için SOCKS5 proxy kullanmasını söyler. HTTP proxy'lerinden farklı olarak SOCKS5, TCP seviyesinde çalışır ve yalnızca HTTP değil her protokolü işleyebilir. DNS çözümlemesi varsayılan olarak yerel yapılır; DNS'i proxy üzerinden çözümlemek için --socks5-hostname kullanın.
Ne zaman kullanılır
SSH tünelleri (ssh -D), Tor ağı erişimi veya proxy'nin HTTP dışı protokolleri işlemesi gerektiğinde kullanın. SOCKS5, UDP'yi destekler ve isteğe bağlı olarak DNS işleyebilir — bu da onu HTTP proxy'lerinden daha esnek kılar.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Proxy Kimlik Doğrulaması

Ne yapar
--proxy-user (veya -U) bayrağı, proxy sunucusuna kimlik doğrulama bilgilerini gönderir. Format: user:password. Bu, sunucu kimlik doğrulamasından (-u) ayrıdır.
Ne zaman kullanılır
Proxy sunucusu kimlik doğrulama talep ettiğinde gereklidir — kurumsal ve enterprise ağ ortamlarında yaygındır. Kimlik bilgileri hedef sunucuya değil proxy'ye gönderilir.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Belirli Hostlar İçin Proxy'yi Atla

Ne yapar
--noproxy bayrağı, proxy'yi atlayıp doğrudan bağlanması gereken hostların, alan adlarının veya IP adreslerinin virgülle ayrılmış listesini belirtir. Joker karakterleri destekler: *.example.com tüm alt alan adlarını eşleştirir.
Ne zaman kullanılır
localhost, dahili hizmetler veya belirli alan adlarını proxy'den hariç tutmak için kullanın. Proxy ortam değişkenleri aracılığıyla global olarak ayarlandığında ancak bazı hostların (yerel hizmetler gibi) doğrudan erişime ihtiyaç duyduğunda önemlidir. Tüm hostlar için proxy'yi atlamak üzere * kullanın.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Ek Proxy Seçenekleri

--socks5-hostname

DNS çözümlemesi proxy üzerinden yapılan SOCKS5 proxy

--proxy-cacert

HTTPS proxy'nin kendisini doğrulamak için CA sertifikası

curl --resolve: Özel DNS Çözümlemesi

Ne yapar
--resolve bayrağı, belirli bir host:port çifti için DNS aramasını tamamen atlayarak özel bir IP adresi sağlar. Format: host:port:adres. Birden fazla --resolve girişi sağlanabilir.
Ne zaman kullanılır
DNS yayılımından önce test, yük dengeleyicinin arkasındaki belirli bir backend'i doğrulama veya SSL sertifika doğrulaması için gerçek bir ana bilgisayar adına ihtiyaç duyulan yerel geliştirme için vazgeçilmezdir. /etc/hosts düzenlemekten farklı olarak bu, istek başına ve port'a özgüdür.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Bağlantıyı Farklı Hosta Yönlendir

Ne yapar
--connect-to bayrağı, HTTP isteği için orijinal URL'yi (Host başlığı ve SNI dahil) korurken TCP bağlantısını farklı bir host:port çiftine yönlendirir. Format: HOST1:PORT1:HOST2:PORT2.
Ne zaman kullanılır
DNS'i veya /etc/hosts dosyasını değiştirmeden yük dengeleyicinin arkasındaki belirli bir backend sunucusunu test etmek için kullanın. --resolve'dan farklı olarak, host:port'u host:port'a eşler (IP'ye değil), bu da hedefin de bir ana bilgisayar adına sahip olduğunda faydalıdır.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Ek Ağ Seçenekleri

--local-port

Bağlantı için yerel port numarasını veya aralığını ayarla

--interface

Bağlantıyı belirli bir ağ arayüzüne bağla

--dns-servers

Sistem varsayılanları yerine özel DNS sunucuları kullan (c-ares)

Gerçek Dünya SSL ve Proxy Senaryoları

Bu örnekler, geliştirme, CI/CD ve üretim ortamlarındaki yaygın güvenlik ve ağ görevlerini ele almak için birden fazla bayrağı birleştirir.

Localhost'ta HTTPS Testi

Kendinden imzalı sertifika ile yerel geliştirme yaparken, --resolve ile --cacert (veya hızlı test için -k) birleştirin. Bu, hosts dosyanızı değiştirmeden doğru SSL/SNI için gerçek bir ana bilgisayar adı kullanmanıza olanak tanır.

$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/status

Karşılıklı TLS (İstemci Sertifikası Kimlik Doğrulaması)

Bazı API'ler hem sunucu hem de istemcinin sertifika sunmasını gerektirir. Tamamen doğrulanmış iki yönlü TLS bağlantısı kurmak için --cert, --key ve --cacert sağlayın.

$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/data

Kimlik Doğrulamalı Kurumsal Proxy

Zorunlu proxy sunucularına sahip kurumsal ağlarda, proxy kimlik bilgileri için -x ile -U birleştirin. Dahili hizmetleri proxy'den hariç tutmak için --noproxy ekleyin.

$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/data

Dahili CA ile Docker Container

Docker'daki hizmetler dahili CA sertifikaları kullandığında, CA sertifikasını container'a monte edin ve --cacert ile referans verin. Bu, -k'dan daha güvenlidir çünkü yine de sertifika zincirini doğrular.

$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/health

SSH Tüneli ile SOCKS5 Proxy

ssh -D ile SOCKS5 proxy oluşturun ve --socks5 kullanarak curl trafiğini bunun üzerinden yönlendirin. Bu, bastion host üzerinden dahili hizmetlere erişmek için faydalıdır.

$ curl --socks5 localhost:1080 https://internal-api.example.com/status

curl SSL ve Proxy Hakkında Sık Sorulan Sorular

curl'da SSL sertifika doğrulamasını nasıl atlarım?

curl -k URL veya curl --insecure URL kullanın. Bu, tüm sertifika denetimlerini devre dışı bırakır — süre dolumu, ana bilgisayar adı uyumsuzluğu, güvenilmeyen CA. Yalnızca yerel geliştirme için kullanın. Üretimde gerçek CA sertifikası ile --cacert kullanın.

curl'un kendinden imzalı bir sertifikaya güvenmesini nasıl sağlarım?

Kendinden imzalı sertifikanızı imzalayan CA sertifikasını belirtmek için curl --cacert /yol/ca.pem URL kullanın. Bu, -k'dan daha güvenlidir çünkü sertifika zincirini doğrulamaya devam eder — yalnızca sizin özel CA'nıza güvenir.

curl'un hangi TLS sürümünü kullandığını nasıl kontrol ederim?

curl -v URL çalıştırın ve ayrıntılı çıktıda * SSL connection using TLSv1.x / CipherSuite satırını arayın. Belirli bir sürümü zorlamak için --tlsv1.2 veya --tlsv1.3 kullanın.

Karşılıklı TLS (mTLS) nedir ve curl ile nasıl kullanırım?

Karşılıklı TLS, hem sunucu hem de istemcinin sertifika sunmasını gerektirir. Şunu kullanın: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. --cert/--key çifti istemciyi doğrular; --cacert sunucuyu doğrular.

curl'u HTTP proxy üzerinden nasıl kullanırım?

curl -x http://proxy:port URL kullanın. HTTPS proxy için: curl -x https://proxy:port URL. Alternatif olarak http_proxy ve https_proxy ortam değişkenlerini ayarlayın — curl bunları otomatik algılar.

curl'u SOCKS5 proxy ile nasıl kullanırım?

Yerel DNS çözümlemesi için curl --socks5 host:port URL veya DNS'i proxy üzerinden çözümlemek için curl --socks5-hostname host:port URL kullanın (gizlilik/Tor için önemli). SSH tüneli örneği: ssh -D 1080 user@bastion, ardından curl --socks5 localhost:1080 URL.

curl'da proxy sunucusuyla kimlik doğrulamasını nasıl yaparım?

curl -x http://proxy:port -U user:password URL kullanın. -U (veya --proxy-user) bayrağı kimlik bilgilerini proxy'ye gönderir. Bu, hedef sunucu ile kimlik doğrulaması yapan -u'dan ayrıdır.

curl'da belirli hostları proxy'den nasıl hariç tutarım?

--noproxy "localhost,127.0.0.1,*.internal.com" kullanın veya NO_PROXY ortam değişkenini ayarlayın. Joker karakterleri destekler (*.example.com). Tek bir istek için proxy'yi tamamen atlamak üzere --noproxy "*" kullanın.

curl ile localhost'ta HTTPS'i nasıl test ederim?

Hızlı test için: curl -k https://localhost:8443/. Doğru doğrulama için: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. --resolve yaklaşımı sertifika ana bilgisayar adı eşleşmesini doğru sağlar.

curl'da belirli bir host için DNS çözümlemesini nasıl geçersiz kılarım?

curl --resolve host:port:IP URL kullanın. Örnek: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Bu, yalnızca o host:port çifti için DNS'i atlar — /etc/hosts düzenlemeye gerek yok.

curl'da 'SSL certificate problem: certificate has expired' hatasını nasıl düzeltirim?

Sunucu sertifikasının süresi dolmuş. Çözümler: (1) Sunucuda sertifikayı yenileyin, (2) CA paketinizi güncelleyin: curl --cacert /yol/guncellenmis-ca.pem URL, (3) Yalnızca test için: curl -k URL. Süreyi kontrol edin: curl -v URL 2>&1 | grep expire.

Üretimde curl --insecure (-k) kullanmak güvenli mi?

Hayır. -k bayrağı tüm sertifika doğrulamasını devre dışı bırakır — süre dolumu, ana bilgisayar adı ve güven zinciri. Bu, bağlantınızı ortadaki adam saldırılarına karşı savunmasız hale getirir. Üretim ve CI/CD pipeline'larında her zaman belirli CA sertifikası ile --cacert kullanın.