Panduan Konfigurasi curl SSL, TLS & Proksi

Mengkonfigurasi sijil HTTPS, versi TLS, proksi, dan resolusi DNS tersuai dalam curl adalah penting untuk komunikasi API yang selamat, saluran paip CI/CD, dan menyahpepijat isu rangkaian. Panduan ini merangkumi setiap bendera SSL, TLS, proksi, dan rangkaian — dari melumpuhkan semakan sijil dengan -k untuk pembangunan tempatan hingga menyediakan TLS bersama dengan --cert dan menghalakan trafik melalui proksi SOCKS5. Setiap pilihan termasuk penjelasan yang jelas, pertimbangan keselamatan, dan contoh sedia untuk disalin.

Rujukan Pantas Bendera SSL & Proksi

-kSSL/TLS

Benarkan sambungan tidak selamat — langkau semua pengesahan SSL

--cacertSSL/TLS

Sahkan sijil pelayan terhadap bundle CA tertentu

--certSSL/TLS

Sediakan sijil pelanggan untuk pengesahan TLS bersama

--keySSL/TLS

Sediakan fail kunci persendirian untuk sijil pelanggan

--tlsv1.2SSL/TLS

Gunakan TLS versi 1.2 atau lebih tinggi untuk sambungan

--tlsv1.3SSL/TLS

Gunakan TLS versi 1.3 atau lebih tinggi untuk sambungan

--ssl-reqdSSL/TLS

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

--ciphersSSL/TLS

Tentukan sifir SSL yang hendak digunakan untuk sambungan

--cert-typeSSL/TLS

Tentukan jenis sijil pelanggan (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Pin dan sahkan kunci awam pelayan (gaya HPKP)

-xProksi

Halakan semua trafik melalui pelayan proksi yang ditentukan

--socks5Proksi

Halakan sambungan melalui proksi SOCKS5

Sediakan nama pengguna:kata laluan untuk pelayan proksi

--noproxyProksi

Senarai hos yang tidak patut melalui proksi

--socks5-hostnameProksi

Proksi SOCKS5 dengan resolusi DNS melalui proksi

--proxy-cacertProksi

Sijil CA untuk mengesahkan proksi HTTPS itu sendiri

--resolveRangkaian

Petakan pasangan host:port tertentu ke alamat IP tersuai

--connect-toRangkaian

Sambung ke host:port yang berbeza daripada yang ditentukan URL

--local-portRangkaian

Tetapkan nombor port tempatan atau julat untuk sambungan

--interfaceRangkaian

Ikat sambungan ke antara muka rangkaian tertentu

--dns-serversRangkaian

Gunakan pelayan DNS tersuai dan bukannya lalai sistem (c-ares)

curl -k: Abaikan Ralat Sijil SSL

Apa yang dilakukannya
Bendera -k (atau --insecure) melumpuhkan semua pengesahan sijil SSL/TLS. curl tidak akan menyemak sama ada sijil pelayan ditandatangani oleh CA yang dipercayai, sama ada nama hos sepadan, atau sama ada sijil telah tamat tempoh.
Bila hendak digunakan
Gunakan hanya untuk pembangunan tempatan dengan sijil yang ditandatangani sendiri atau persekitaran ujian. Untuk pementasan/pengeluaran, gunakan --cacert dengan sijil CA sebenar — ia lebih selamat dan lebih eksplisit.
$ curl -k https://localhost:8443/api/health

Jangan sekali-kali gunakan -k dalam skrip pengeluaran atau saluran paip CI/CD. Ia melumpuhkan semua pengesahan sijil, menjadikan sambungan anda terdedah kepada serangan man-in-the-middle. Gunakan --cacert untuk mempercayai CA tertentu.

curl --cacert: Gunakan Sijil CA Tersuai

Apa yang dilakukannya
Bendera --cacert memberitahu curl untuk mengesahkan sijil SSL pelayan terhadap fail bundle CA (Pihak Berkuasa Sijil) tertentu dalam format PEM, dan bukannya stor amanah lalai sistem.
Bila hendak digunakan
Gunakan apabila pelayan anda menggunakan sijil yang ditandatangani oleh CA persendirian atau dalaman yang tiada dalam stor amanah sistem. Ini biasa dalam persekitaran korporat, kluster Kubernetes, dan penyediaan Docker dengan PKI dalaman.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: Sijil Pelanggan (TLS Bersama)

Apa yang dilakukannya
Bendera --cert menyediakan sijil sisi pelanggan untuk TLS bersama (mTLS). Dalam mTLS, kedua-dua pelayan dan pelanggan membentangkan sijil untuk mengesahkan identiti masing-masing. Fail sijil hendaklah dalam format PEM atau PKCS#12.
Bila hendak digunakan
Diperlukan apabila pelayan menuntut pengesahan sijil pelanggan — biasa dalam API perbankan, perkhidmatan kerajaan, komunikasi peranti IoT, dan seni bina kepercayaan sifar. Sentiasa gandingkan dengan --key melainkan kunci tertanam dalam fail sijil.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Kunci Persendirian Sijil Pelanggan

Apa yang dilakukannya
Bendera --key menentukan fail kunci persendirian yang berpasangan dengan sijil pelanggan yang disediakan oleh --cert. Kunci mesti sepadan dengan sijil. Jika kunci dilindungi kata laluan, curl akan meminta frasa laluan (atau gunakan --pass).
Bila hendak digunakan
Sentiasa gunakan bersama --cert. Jika kunci persendirian sudah tertanam dalam fail sijil (biasa dengan PKCS#12 / fail .p12), anda boleh tinggalkan --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

Apa yang dilakukannya
Bendera --tlsv1.2 memaksa curl menggunakan TLS 1.2 sebagai versi minimum yang boleh diterima untuk jabat tangan SSL/TLS. Protokol lama (TLS 1.0, 1.1, SSLv3) ditolak.
Bila hendak digunakan
Gunakan untuk menguatkuasakan standard keselamatan minimum. TLS 1.2 diperlukan untuk pematuhan PCI-DSS dan disokong oleh semua pelayan moden. Kebanyakan binaan curl moden sudah lalai kepada TLS 1.2+, tetapi bendera ini menjadikannya eksplisit.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Paksa TLS 1.3 Minimum

Apa yang dilakukannya
Bendera --tlsv1.3 memaksa curl menggunakan TLS 1.3 — versi TLS yang terpantas dan paling selamat. TLS 1.3 menghapuskan perjalanan pergi balik tambahan dalam jabat tangan (sokongan 0-RTT) dan mengalih keluar semua suite sifir yang lapuk.
Bila hendak digunakan
Gunakan apabila anda tahu pelayan menyokong TLS 1.3 dan anda mahukan prestasi dan keselamatan terbaik. Nota: TLS 1.3 memerlukan OpenSSL 1.1.1+ atau pustaka TLS yang serasi. Tidak semua pelayan menyokongnya lagi.
$ curl --tlsv1.3 https://modern-api.example.com/data

Pilihan SSL/TLS Tambahan

--ssl-reqd

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

--ciphers

Tentukan sifir SSL yang hendak digunakan untuk sambungan

--cert-type

Tentukan jenis sijil pelanggan (PEM, DER, ENG, P12)

--pinnedpubkey

Pin dan sahkan kunci awam pelayan (gaya HPKP)

curl -x: Gunakan Proksi HTTP/HTTPS

Apa yang dilakukannya
Bendera -x (atau --proxy) menghalakan semua trafik curl melalui pelayan proksi yang ditentukan. Formatnya ialah [protocol://]host[:port]. Protokol proksi yang disokong: HTTP, HTTPS, SOCKS4, SOCKS5.
Bila hendak digunakan
Gunakan untuk pelayan proksi korporat, menyahpepijat dengan alat seperti Fiddler, Charles, atau mitmproxy, menguji sekatan geografi, atau apabila akses internet langsung tidak tersedia. Anda juga boleh menetapkan pembolehubah persekitaran http_proxy / https_proxy sebagai ganti.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Gunakan Proksi SOCKS5

Apa yang dilakukannya
Bendera --socks5 memberitahu curl untuk menggunakan proksi SOCKS5 untuk sambungan TCP. Tidak seperti proksi HTTP, SOCKS5 beroperasi pada peringkat TCP dan boleh mengendalikan sebarang protokol — bukan hanya HTTP. Resolusi DNS dilakukan secara tempatan secara lalai; gunakan --socks5-hostname untuk menyelesaikan DNS melalui proksi.
Bila hendak digunakan
Gunakan untuk terowong SSH (ssh -D), akses rangkaian Tor, atau apabila proksi mesti mengendalikan protokol bukan HTTP. SOCKS5 menyokong UDP dan secara pilihan boleh mengendalikan DNS — menjadikannya lebih fleksibel daripada proksi HTTP.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Pengesahan Proksi

Apa yang dilakukannya
Bendera --proxy-user (atau -U) menghantar kelayakan pengesahan ke pelayan proksi. Formatnya ialah user:password. Ini berasingan daripada pengesahan pelayan (-u).
Bila hendak digunakan
Diperlukan apabila pelayan proksi menuntut pengesahan — biasa dalam persekitaran rangkaian korporat dan perusahaan. Kelayakan dihantar ke proksi, bukan ke pelayan sasaran.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Pintas Proksi untuk Hos Tertentu

Apa yang dilakukannya
Bendera --noproxy menentukan senarai hos, domain, atau alamat IP yang dipisahkan koma yang harus memintas proksi dan menyambung secara langsung. Menyokong kad liar: *.example.com sepadan dengan semua subdomain.
Bila hendak digunakan
Gunakan untuk mengecualikan localhost, perkhidmatan dalaman, atau domain tertentu daripada diproksi. Ini penting apabila proksi ditetapkan secara global melalui pembolehubah persekitaran tetapi sesetengah hos (seperti perkhidmatan tempatan) memerlukan akses langsung. Gunakan * untuk memintas proksi untuk semua hos.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Pilihan Proksi Tambahan

--socks5-hostname

Proksi SOCKS5 dengan resolusi DNS melalui proksi

--proxy-cacert

Sijil CA untuk mengesahkan proksi HTTPS itu sendiri

curl --resolve: Resolusi DNS Tersuai

Apa yang dilakukannya
Bendera --resolve menyediakan alamat IP tersuai untuk pasangan host:port tertentu, memintas carian DNS sepenuhnya. Formatnya ialah host:port:address. Berbilang entri --resolve boleh disediakan.
Bila hendak digunakan
Penting untuk pengujian sebelum penyebaran DNS, mengesahkan backend tertentu di belakang pengimbang beban, atau pembangunan tempatan di mana anda memerlukan nama hos sebenar untuk pengesahan sijil SSL. Tidak seperti menyunting /etc/hosts, ini adalah per-permintaan dan khusus port.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Alihkan Sambungan ke Hos Berbeza

Apa yang dilakukannya
Bendera --connect-to mengalihkan sambungan TCP ke pasangan host:port yang berbeza sambil mengekalkan URL asal untuk permintaan HTTP (termasuk pengepala Host dan SNI). Format: HOST1:PORT1:HOST2:PORT2.
Bila hendak digunakan
Gunakan untuk menguji pelayan backend tertentu di belakang pengimbang beban tanpa mengubah suai DNS atau /etc/hosts. Tidak seperti --resolve, ini memetakan host:port ke host:port (bukan ke IP), yang berguna apabila sasaran juga mempunyai nama hos.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Pilihan Rangkaian Tambahan

--local-port

Tetapkan nombor port tempatan atau julat untuk sambungan

--interface

Ikat sambungan ke antara muka rangkaian tertentu

--dns-servers

Gunakan pelayan DNS tersuai dan bukannya lalai sistem (c-ares)

Senario SSL & Proksi Dunia Sebenar

Contoh-contoh ini menggabungkan beberapa bendera untuk mengendalikan tugas keselamatan dan rangkaian biasa dalam pembangunan, CI/CD, dan persekitaran pengeluaran.

Menguji HTTPS pada Localhost

Apabila membangunkan secara tempatan dengan sijil yang ditandatangani sendiri, gabungkan --resolve dengan --cacert (atau -k untuk ujian pantas). Ini membolehkan anda menggunakan nama hos sebenar untuk SSL/SNI yang betul tanpa mengubah suai fail hosts anda.

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

TLS Bersama (Pengesahan Sijil Pelanggan)

Sesetengah API memerlukan kedua-dua pelayan dan pelanggan membentangkan sijil. Sediakan --cert, --key, dan --cacert untuk mewujudkan sambungan TLS dua hala yang disahkan sepenuhnya.

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

Proksi Korporat dengan Pengesahan

Dalam rangkaian korporat dengan pelayan proksi mandatori, gabungkan -x dengan -U untuk kelayakan proksi. Tambah --noproxy untuk mengecualikan perkhidmatan dalaman daripada diproksi.

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

Kontena Docker dengan CA Dalaman

Apabila perkhidmatan dalam Docker menggunakan sijil daripada CA dalaman, lekapkan sijil CA ke dalam kontena dan rujuknya dengan --cacert. Ini lebih selamat daripada -k kerana ia masih mengesahkan rantaian sijil.

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

Proksi SOCKS5 melalui Terowong SSH

Cipta proksi SOCKS5 dengan ssh -D dan halakan trafik curl melaluinya menggunakan --socks5. Ini berguna untuk mengakses perkhidmatan dalaman melalui hos benteng.

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

Soalan Lazim tentang curl SSL & Proksi

Bagaimana saya melangkau pengesahan sijil SSL dalam curl?

Gunakan curl -k URL atau curl --insecure URL. Ini melumpuhkan semua semakan sijil — tamat tempoh, ketidakpadanan nama hos, CA yang tidak dipercayai. Gunakan hanya untuk pembangunan tempatan. Untuk pengeluaran, gunakan --cacert dengan sijil CA sebenar.

Bagaimana saya membuat curl mempercayai sijil yang ditandatangani sendiri?

Gunakan curl --cacert /path/to/ca.pem URL untuk menentukan sijil CA yang menandatangani sijil yang ditandatangani sendiri anda. Ini lebih selamat daripada -k kerana ia masih mengesahkan rantaian sijil — hanya mempercayai CA tertentu anda.

Bagaimana saya menyemak versi TLS yang digunakan curl?

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

Apakah TLS bersama (mTLS) dan bagaimana menggunakannya dengan curl?

TLS bersama memerlukan kedua-dua pelayan dan pelanggan membentangkan sijil. Gunakan: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Pasangan --cert/--key mengesahkan pelanggan; --cacert mengesahkan pelayan.

Bagaimana saya menggunakan curl melalui proksi HTTP?

Gunakan curl -x http://proxy:port URL. Untuk proksi HTTPS: curl -x https://proxy:port URL. Sebagai alternatif, tetapkan pembolehubah persekitaran http_proxy dan https_proxy — curl mengesannya secara automatik.

Bagaimana saya menggunakan curl dengan proksi SOCKS5?

Gunakan curl --socks5 host:port URL untuk resolusi DNS tempatan, atau curl --socks5-hostname host:port URL untuk menyelesaikan DNS melalui proksi (penting untuk privasi/Tor). Contoh dengan terowong SSH: ssh -D 1080 user@bastion, kemudian curl --socks5 localhost:1080 URL.

Bagaimana saya mengesahkan dengan pelayan proksi dalam curl?

Gunakan curl -x http://proxy:port -U user:password URL. Bendera -U (atau --proxy-user) menghantar kelayakan ke proksi. Ini berasingan daripada -u, yang mengesahkan dengan pelayan sasaran.

Bagaimana saya mengecualikan hos tertentu daripada proksi dalam curl?

Gunakan --noproxy "localhost,127.0.0.1,*.internal.com" atau tetapkan pembolehubah persekitaran NO_PROXY. Menyokong kad liar (*.example.com). Gunakan --noproxy "*" untuk memintas proksi sepenuhnya untuk satu permintaan.

Bagaimana saya menguji HTTPS pada localhost dengan curl?

Untuk ujian pantas: curl -k https://localhost:8443/. Untuk pengesahan betul: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Pendekatan --resolve membolehkan nama hos sijil sepadan dengan betul.

Bagaimana saya mengatasi resolusi DNS untuk hos tertentu dalam curl?

Gunakan curl --resolve host:port:IP URL. Contoh: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Ini memintas DNS untuk pasangan host:port itu sahaja — tidak perlu menyunting /etc/hosts.

Bagaimana saya membetulkan 'SSL certificate problem: certificate has expired' dalam curl?

Sijil pelayan telah tamat tempoh. Penyelesaian: (1) Perbaharui sijil pada pelayan, (2) Kemas kini bundle CA anda: curl --cacert /path/to/updated-ca.pem URL, (3) Untuk ujian sahaja: curl -k URL. Semak tamat tempoh: curl -v URL 2>&1 | grep expire.

Adakah selamat menggunakan curl --insecure (-k) dalam pengeluaran?

Tidak. Bendera -k melumpuhkan semua pengesahan sijil — tamat tempoh, nama hos, dan rantaian amanah. Ini menjadikan sambungan anda terdedah kepada serangan man-in-the-middle. Sentiasa gunakan --cacert dengan sijil CA tertentu dalam pengeluaran dan saluran paip CI/CD.