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
Izinkan koneksi tidak aman — lewati semua verifikasi SSL
Verifikasi sertifikat server terhadap bundle CA tertentu
Berikan sertifikat klien untuk autentikasi mutual TLS
Berikan file private key untuk sertifikat klien
Gunakan TLS versi 1.2 atau lebih tinggi untuk koneksi
Gunakan TLS versi 1.3 atau lebih tinggi untuk koneksi
Wajibkan SSL/TLS untuk koneksi (gagal jika tidak tersedia)
Tentukan cipher SSL yang akan digunakan untuk koneksi
Tentukan tipe sertifikat klien (PEM, DER, ENG, P12)
Pin dan verifikasi public key server (gaya HPKP)
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
Proxy SOCKS5 dengan resolusi DNS melalui proxy
Sertifikat CA untuk memverifikasi proxy HTTPS itu sendiri
Petakan pasangan host:port tertentu ke alamat IP kustom
Terhubung ke host:port berbeda dari yang ditentukan URL
Atur nomor port lokal atau rentang untuk koneksi
Ikat koneksi ke antarmuka jaringan tertentu
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
--cacertdengan sertifikat CA yang sebenarnya — ini lebih aman dan lebih eksplisit.
$ curl -k https://localhost:8443/api/healthJangan 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
--cacertmemerintahkan 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/datacurl --cert: Sertifikat Klien (Mutual TLS)
- Fungsinya
- Flag
--certmenyediakan 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
--keykecuali kunci sudah tertanam dalam file sertifikat.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Private Key Sertifikat Klien
- Fungsinya
- Flag
--keymenentukan 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/securecurl --tlsv1.2: Paksa TLS 1.2 Minimum
- Fungsinya
- Flag
--tlsv1.2memaksa 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.3memaksa 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/dataOpsi SSL/TLS Tambahan
Wajibkan SSL/TLS untuk koneksi (gagal jika tidak tersedia)
Tentukan cipher SSL yang akan digunakan untuk koneksi
Tentukan tipe sertifikat klien (PEM, DER, ENG, P12)
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_proxysebagai gantinya.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Gunakan SOCKS5 Proxy
- Fungsinya
- Flag
--socks5memerintahkan 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-hostnameuntuk 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/datacurl --proxy-user: Autentikasi Proxy
- Fungsinya
- Flag
--proxy-user(atau-U) mengirim kredensial autentikasi ke server proxy. Formatnya adalahuser: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/datacurl --noproxy: Lewati Proxy untuk Host Tertentu
- Fungsinya
- Flag
--noproxymenentukan daftar host, domain, atau alamat IP yang dipisahkan koma yang harus melewati proxy dan terhubung langsung. Mendukung wildcard:*.example.comcocok 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/apiOpsi Proxy Tambahan
Proxy SOCKS5 dengan resolusi DNS melalui proxy
Sertifikat CA untuk memverifikasi proxy HTTPS itu sendiri
curl --resolve: Resolusi DNS Kustom
- Fungsinya
- Flag
--resolvemenyediakan alamat IP kustom untuk pasanganhost:porttertentu, sepenuhnya melewati pencarian DNS. Formatnya adalahhost:port:address. Beberapa entri--resolvedapat 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/healthcurl --connect-to: Arahkan Koneksi ke Host Berbeda
- Fungsinya
- Flag
--connect-tomengarahkan koneksi TCP ke pasanganhost:portyang berbeda sambil mempertahankan URL asli untuk request HTTP (termasuk headerHostdan 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/healthOpsi Jaringan Tambahan
Atur nomor port lokal atau rentang untuk koneksi
Ikat koneksi ke antarmuka jaringan tertentu
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/statusMutual 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/dataProxy 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/dataContainer 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/healthProxy 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/statusPertanyaan 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.