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
Güvensiz bağlantılara izin ver — tüm SSL doğrulamasını atla
Sunucu sertifikasını belirli bir CA paketine karşı doğrula
Karşılıklı TLS kimlik doğrulaması için istemci sertifikası sağla
İstemci sertifikası için özel anahtar dosyasını sağla
Bağlantı için TLS sürüm 1.2 veya üstünü kullan
Bağlantı için TLS sürüm 1.3 veya üstünü kullan
Bağlantı için SSL/TLS gerekli kıl (mevcut değilse başarısız ol)
Bağlantı için hangi SSL şifrelerinin kullanılacağını belirt
İstemci sertifika türünü belirt (PEM, DER, ENG, P12)
Sunucu açık anahtarını sabitle ve doğrula (HPKP tarzı)
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
DNS çözümlemesi proxy üzerinden yapılan SOCKS5 proxy
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
Bağlantı için yerel port numarasını veya aralığını ayarla
Bağlantıyı belirli bir ağ arayüzüne bağla
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
--cacertile 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
--cacertbayrağı, 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/datacurl --cert: İstemci Sertifikası (Karşılıklı TLS)
- Ne yapar
--certbayrağı, 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
--keyile eşleştirin.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: İstemci Sertifikası Özel Anahtarı
- Ne yapar
--keybayrağı,--certile 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--passkullanın).- Ne zaman kullanılır
- Her zaman
--certile birlikte kullanın. Özel anahtar zaten sertifika dosyasına gömülüyse (PKCS#12 / .p12 dosyalarında yaygın),--keyparametresini atlayabilirsiniz.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Minimum TLS 1.2 Zorla
- Ne yapar
--tlsv1.2bayrağı, 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.3bayrağı, 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/dataEk SSL/TLS Seçenekleri
Bağlantı için SSL/TLS gerekli kıl (mevcut değilse başarısız ol)
Bağlantı için hangi SSL şifrelerinin kullanılacağını belirt
İstemci sertifika türünü belirt (PEM, DER, ENG, P12)
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_proxyortam değişkenlerini ayarlayabilirsiniz.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: SOCKS5 Proxy Kullan
- Ne yapar
--socks5bayrağı, 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-hostnamekullanı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/datacurl --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/datacurl --noproxy: Belirli Hostlar İçin Proxy'yi Atla
- Ne yapar
--noproxybayrağı, 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.comtü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/apiEk Proxy Seçenekleri
DNS çözümlemesi proxy üzerinden yapılan SOCKS5 proxy
HTTPS proxy'nin kendisini doğrulamak için CA sertifikası
curl --resolve: Özel DNS Çözümlemesi
- Ne yapar
--resolvebayrağı, belirli birhost:portçifti için DNS aramasını tamamen atlayarak özel bir IP adresi sağlar. Format:host:port:adres. Birden fazla--resolvegiriş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/hostsdü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/healthcurl --connect-to: Bağlantıyı Farklı Hosta Yönlendir
- Ne yapar
--connect-tobayrağı, HTTP isteği için orijinal URL'yi (Hostbaşlığı ve SNI dahil) korurken TCP bağlantısını farklı birhost:portçiftine yönlendirir. Format:HOST1:PORT1:HOST2:PORT2.- Ne zaman kullanılır
- DNS'i veya
/etc/hostsdosyası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/healthEk Ağ Seçenekleri
Bağlantı için yerel port numarasını veya aralığını ayarla
Bağlantıyı belirli bir ağ arayüzüne bağla
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/statusKarşı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/dataKimlik 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/dataDahili 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/healthSSH 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/statuscurl 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.