Panduan Konfigurasi curl SSL, TLS & Proxy

Mengonfigurasi sertifikat HTTPS, versi TLS, proxy, dan resolusi DNS kustom di curl sangat penting untuk komunikasi API yang aman, pipeline CI/CD, dan debugging masalah jaringan. Panduan ini mencakup setiap flag SSL, TLS, proxy, dan jaringan — dari menonaktifkan pemeriksaan sertifikat dengan -k untuk pengembangan lokal hingga menyiapkan mutual TLS dengan --cert dan merutekan lalu lintas melalui proxy SOCKS5. Setiap opsi mencakup penjelasan yang jelas, pertimbangan keamanan, dan contoh siap salin.

Referensi Cepat Flag SSL & Proxy

-kSSL/TLS

Izinkan koneksi tidak aman — lewati semua verifikasi SSL

--cacertSSL/TLS

Verifikasi sertifikat server terhadap bundle CA tertentu

--certSSL/TLS

Berikan sertifikat klien untuk autentikasi mutual TLS

--keySSL/TLS

Berikan file private key untuk sertifikat klien

--tlsv1.2SSL/TLS

Gunakan TLS versi 1.2 atau lebih tinggi untuk koneksi

--tlsv1.3SSL/TLS

Gunakan TLS versi 1.3 atau lebih tinggi untuk koneksi

--ssl-reqdSSL/TLS

Wajibkan SSL/TLS untuk koneksi (gagal jika tidak tersedia)

--ciphersSSL/TLS

Tentukan cipher SSL yang akan digunakan untuk koneksi

--cert-typeSSL/TLS

Tentukan tipe sertifikat klien (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Pin dan verifikasi public key server (gaya HPKP)

-xProxy

Rutekan semua lalu lintas melalui server proxy yang ditentukan

Rutekan koneksi melalui proxy SOCKS5

Berikan username:password untuk server proxy

Daftar host yang tidak boleh melalui proxy

--socks5-hostnameProxy

Proxy SOCKS5 dengan resolusi DNS melalui proxy

--proxy-cacertProxy

Sertifikat CA untuk memverifikasi proxy HTTPS itu sendiri

--resolveJaringan

Petakan pasangan host:port tertentu ke alamat IP kustom

--connect-toJaringan

Terhubung ke host:port berbeda dari yang ditentukan URL

--local-portJaringan

Atur nomor port lokal atau rentang untuk koneksi

--interfaceJaringan

Ikat koneksi ke antarmuka jaringan tertentu

--dns-serversJaringan

Gunakan server DNS kustom alih-alih default sistem (c-ares)

curl -k: Abaikan Error Sertifikat SSL

Fungsinya
Flag -k (atau --insecure) menonaktifkan semua verifikasi sertifikat SSL/TLS. curl tidak akan memeriksa apakah sertifikat server ditandatangani oleh CA tepercaya, apakah hostname cocok, atau apakah sertifikat telah kedaluwarsa.
Kapan menggunakan
Gunakan hanya untuk pengembangan lokal dengan sertifikat self-signed atau lingkungan pengujian. Untuk staging/production, gunakan --cacert dengan sertifikat CA yang sebenarnya — ini lebih aman dan lebih eksplisit.
$ curl -k https://localhost:8443/api/health

Jangan pernah gunakan -k dalam skrip production atau pipeline CI/CD. Flag ini menonaktifkan semua validasi sertifikat, membuat koneksi Anda rentan terhadap serangan man-in-the-middle. Gunakan --cacert untuk mempercayai CA tertentu.

curl --cacert: Gunakan Sertifikat CA Kustom

Fungsinya
Flag --cacert memerintahkan curl untuk memverifikasi sertifikat SSL server terhadap file bundle CA (Certificate Authority) tertentu dalam format PEM, alih-alih trust store default sistem.
Kapan menggunakan
Gunakan saat server Anda menggunakan sertifikat yang ditandatangani oleh CA privat atau internal yang tidak ada di trust store sistem. Ini umum di lingkungan korporat, klaster Kubernetes, dan pengaturan Docker dengan PKI internal.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: Sertifikat Klien (Mutual TLS)

Fungsinya
Flag --cert menyediakan sertifikat sisi klien untuk mutual TLS (mTLS). Dalam mTLS, baik server maupun klien menunjukkan sertifikat untuk memverifikasi identitas masing-masing. File sertifikat harus dalam format PEM atau PKCS#12.
Kapan menggunakan
Diperlukan saat server menuntut autentikasi sertifikat klien — umum di API perbankan, layanan pemerintah, komunikasi perangkat IoT, dan arsitektur zero-trust. Selalu pasangkan dengan --key kecuali kunci sudah tertanam dalam file sertifikat.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Private Key Sertifikat Klien

Fungsinya
Flag --key menentukan file private key yang berpasangan dengan sertifikat klien yang disediakan oleh --cert. Kunci harus cocok dengan sertifikat. Jika kunci dilindungi password, curl akan meminta passphrase (atau gunakan --pass).
Kapan menggunakan
Selalu gunakan bersama dengan --cert. Jika private key sudah tertanam dalam file sertifikat (umum dengan PKCS#12 / .p12 files), Anda dapat menghilangkan --key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: Paksa TLS 1.2 Minimum

Fungsinya
Flag --tlsv1.2 memaksa curl untuk menggunakan TLS 1.2 sebagai versi minimum yang dapat diterima untuk handshake SSL/TLS. Protokol lama (TLS 1.0, 1.1, SSLv3) ditolak.
Kapan menggunakan
Gunakan untuk menerapkan standar keamanan minimum. TLS 1.2 diperlukan untuk kepatuhan PCI-DSS dan didukung oleh semua server modern. Sebagian besar build curl modern sudah default ke TLS 1.2+, tetapi flag ini membuatnya eksplisit.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Paksa TLS 1.3 Minimum

Fungsinya
Flag --tlsv1.3 memaksa curl untuk menggunakan TLS 1.3 — versi TLS tercepat dan paling aman. TLS 1.3 menghilangkan round-trip ekstra dalam handshake (dukungan 0-RTT) dan menghapus semua cipher suite usang.
Kapan menggunakan
Gunakan saat Anda tahu server mendukung TLS 1.3 dan Anda ingin performa dan keamanan terbaik. Catatan: TLS 1.3 memerlukan OpenSSL 1.1.1+ atau library TLS yang kompatibel. Belum semua server mendukungnya.
$ curl --tlsv1.3 https://modern-api.example.com/data

Opsi SSL/TLS Tambahan

--ssl-reqd

Wajibkan SSL/TLS untuk koneksi (gagal jika tidak tersedia)

--ciphers

Tentukan cipher SSL yang akan digunakan untuk koneksi

--cert-type

Tentukan tipe sertifikat klien (PEM, DER, ENG, P12)

--pinnedpubkey

Pin dan verifikasi public key server (gaya HPKP)

curl -x: Gunakan HTTP/HTTPS Proxy

Fungsinya
Flag -x (atau --proxy) merutekan semua lalu lintas curl melalui server proxy yang ditentukan. Formatnya adalah [protocol://]host[:port]. Protokol proxy yang didukung: HTTP, HTTPS, SOCKS4, SOCKS5.
Kapan menggunakan
Gunakan untuk server proxy korporat, debugging dengan alat seperti Fiddler, Charles, atau mitmproxy, menguji pembatasan geografis, atau saat akses internet langsung tidak tersedia. Anda juga dapat mengatur variabel lingkungan http_proxy / https_proxy sebagai gantinya.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Gunakan SOCKS5 Proxy

Fungsinya
Flag --socks5 memerintahkan curl untuk menggunakan proxy SOCKS5 untuk koneksi TCP. Tidak seperti proxy HTTP, SOCKS5 beroperasi di level TCP dan dapat menangani protokol apa pun — bukan hanya HTTP. Resolusi DNS dilakukan secara lokal secara default; gunakan --socks5-hostname untuk menyelesaikan DNS melalui proxy.
Kapan menggunakan
Gunakan untuk SSH tunnel (ssh -D), akses jaringan Tor, atau saat proxy harus menangani protokol non-HTTP. SOCKS5 mendukung UDP dan secara opsional dapat menangani DNS — membuatnya lebih fleksibel daripada proxy HTTP.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Autentikasi Proxy

Fungsinya
Flag --proxy-user (atau -U) mengirim kredensial autentikasi ke server proxy. Formatnya adalah user:password. Ini terpisah dari autentikasi server (-u).
Kapan menggunakan
Diperlukan saat server proxy menuntut autentikasi — umum di lingkungan jaringan korporat dan enterprise. Kredensial dikirim ke proxy, bukan ke server target.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Lewati Proxy untuk Host Tertentu

Fungsinya
Flag --noproxy menentukan daftar host, domain, atau alamat IP yang dipisahkan koma yang harus melewati proxy dan terhubung langsung. Mendukung wildcard: *.example.com cocok dengan semua subdomain.
Kapan menggunakan
Gunakan untuk mengecualikan localhost, layanan internal, atau domain tertentu dari proxy. Ini penting saat proxy diatur secara global melalui variabel lingkungan tetapi beberapa host (seperti layanan lokal) membutuhkan akses langsung. Gunakan * untuk melewati proxy untuk semua host.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Opsi Proxy Tambahan

--socks5-hostname

Proxy SOCKS5 dengan resolusi DNS melalui proxy

--proxy-cacert

Sertifikat CA untuk memverifikasi proxy HTTPS itu sendiri

curl --resolve: Resolusi DNS Kustom

Fungsinya
Flag --resolve menyediakan alamat IP kustom untuk pasangan host:port tertentu, sepenuhnya melewati pencarian DNS. Formatnya adalah host:port:address. Beberapa entri --resolve dapat disediakan.
Kapan menggunakan
Penting untuk pengujian sebelum propagasi DNS, memverifikasi backend tertentu di belakang load balancer, atau pengembangan lokal di mana Anda membutuhkan hostname asli untuk validasi sertifikat SSL. Tidak seperti mengedit /etc/hosts, ini per-request dan spesifik port.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Arahkan Koneksi ke Host Berbeda

Fungsinya
Flag --connect-to mengarahkan koneksi TCP ke pasangan host:port yang berbeda sambil mempertahankan URL asli untuk request HTTP (termasuk header Host dan SNI). Format: HOST1:PORT1:HOST2:PORT2.
Kapan menggunakan
Gunakan untuk menguji server backend tertentu di belakang load balancer tanpa memodifikasi DNS atau /etc/hosts. Tidak seperti --resolve, ini memetakan host:port ke host:port (bukan ke IP), yang berguna saat target juga memiliki hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Opsi Jaringan Tambahan

--local-port

Atur nomor port lokal atau rentang untuk koneksi

--interface

Ikat koneksi ke antarmuka jaringan tertentu

--dns-servers

Gunakan server DNS kustom alih-alih default sistem (c-ares)

Skenario SSL & Proxy Dunia Nyata

Contoh-contoh ini menggabungkan beberapa flag untuk menangani tugas keamanan dan jaringan umum di lingkungan pengembangan, CI/CD, dan production.

Menguji HTTPS di Localhost

Saat mengembangkan secara lokal dengan sertifikat self-signed, kombinasikan --resolve dengan --cacert (atau -k untuk pengujian cepat). Ini memungkinkan Anda menggunakan hostname asli untuk SSL/SNI yang tepat tanpa memodifikasi file hosts.

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

Mutual TLS (Autentikasi Sertifikat Klien)

Beberapa API mengharuskan baik server maupun klien untuk menunjukkan sertifikat. Berikan --cert, --key, dan --cacert untuk membuat koneksi TLS dua arah yang sepenuhnya terverifikasi.

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

Proxy Korporat dengan Autentikasi

Di jaringan korporat dengan server proxy wajib, kombinasikan -x dengan -U untuk kredensial proxy. Tambahkan --noproxy untuk mengecualikan layanan internal dari proxy.

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

Container Docker dengan CA Internal

Saat layanan di Docker menggunakan sertifikat dari CA internal, mount sertifikat CA ke dalam container dan rujuk dengan --cacert. Ini lebih aman daripada -k karena masih memvalidasi rantai sertifikat.

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

Proxy SOCKS5 via SSH Tunnel

Buat proxy SOCKS5 dengan ssh -D dan rutekan lalu lintas curl melaluinya menggunakan --socks5. Ini berguna untuk mengakses layanan internal melalui bastion host.

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

Pertanyaan yang Sering Diajukan tentang curl SSL & Proxy

Bagaimana cara melewati verifikasi sertifikat SSL di curl?

Gunakan curl -k URL atau curl --insecure URL. Ini menonaktifkan semua pemeriksaan sertifikat — kedaluwarsa, ketidakcocokan hostname, CA tidak tepercaya. Gunakan hanya untuk pengembangan lokal. Untuk production, gunakan --cacert dengan sertifikat CA yang sebenarnya.

Bagaimana cara membuat curl mempercayai sertifikat self-signed?

Gunakan curl --cacert /path/ke/ca.pem URL untuk menentukan sertifikat CA yang menandatangani sertifikat self-signed Anda. Ini lebih aman daripada -k karena masih memvalidasi rantai sertifikat — hanya mempercayai CA spesifik Anda.

Bagaimana cara memeriksa versi TLS mana yang digunakan curl?

Jalankan curl -v URL dan cari baris * SSL connection using TLSv1.x / CipherSuite di output verbose. Untuk memaksa versi tertentu, gunakan --tlsv1.2 atau --tlsv1.3.

Apa itu mutual TLS (mTLS) dan bagaimana menggunakannya dengan curl?

Mutual TLS mengharuskan baik server maupun klien untuk menunjukkan sertifikat. Penggunaan: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Pasangan --cert/--key mengautentikasi klien; --cacert memverifikasi server.

Bagaimana cara menggunakan curl melalui HTTP proxy?

Gunakan curl -x http://proxy:port URL. Untuk HTTPS proxy: curl -x https://proxy:port URL. Alternatifnya, atur variabel lingkungan http_proxy dan https_proxy — curl akan mendeteksinya secara otomatis.

Bagaimana cara menggunakan curl dengan proxy SOCKS5?

Gunakan curl --socks5 host:port URL untuk resolusi DNS lokal, atau curl --socks5-hostname host:port URL untuk menyelesaikan DNS melalui proxy (penting untuk privasi/Tor). Contoh SSH tunnel: ssh -D 1080 user@bastion, lalu curl --socks5 localhost:1080 URL.

Bagaimana cara mengautentikasi dengan server proxy di curl?

Gunakan curl -x http://proxy:port -U user:password URL. Flag -U (atau --proxy-user) mengirim kredensial ke proxy. Ini terpisah dari -u, yang mengautentikasi dengan server target.

Bagaimana cara mengecualikan host tertentu dari proxy di curl?

Gunakan --noproxy "localhost,127.0.0.1,*.internal.com" atau atur variabel lingkungan NO_PROXY. Mendukung wildcard (*.example.com). Gunakan --noproxy "*" untuk melewati proxy sepenuhnya untuk satu request.

Bagaimana cara menguji HTTPS di localhost dengan curl?

Untuk pengujian cepat: curl -k https://localhost:8443/. Untuk validasi yang tepat: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Pendekatan --resolve memungkinkan hostname sertifikat cocok dengan benar.

Bagaimana cara mengoverride resolusi DNS untuk host tertentu di curl?

Gunakan curl --resolve host:port:IP URL. Contoh: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Ini melewati DNS hanya untuk pasangan host:port tersebut — tidak perlu mengedit /etc/hosts.

Bagaimana cara memperbaiki 'SSL certificate problem: certificate has expired' di curl?

Sertifikat server telah kedaluwarsa. Solusi: (1) Perbarui sertifikat di server, (2) Update bundle CA: curl --cacert /path/ke/updated-ca.pem URL, (3) Hanya untuk pengujian: curl -k URL. Periksa kedaluwarsa: curl -v URL 2>&1 | grep expire.

Apakah aman menggunakan curl --insecure (-k) di production?

Tidak. Flag -k menonaktifkan semua validasi sertifikat — kedaluwarsa, hostname, dan rantai kepercayaan. Ini membuat koneksi Anda rentan terhadap serangan man-in-the-middle. Selalu gunakan --cacert dengan sertifikat CA spesifik di production dan pipeline CI/CD.