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
Benarkan sambungan tidak selamat — langkau semua pengesahan SSL
Sahkan sijil pelayan terhadap bundle CA tertentu
Sediakan sijil pelanggan untuk pengesahan TLS bersama
Sediakan fail kunci persendirian untuk sijil pelanggan
Gunakan TLS versi 1.2 atau lebih tinggi untuk sambungan
Gunakan TLS versi 1.3 atau lebih tinggi untuk sambungan
Wajibkan SSL/TLS untuk sambungan (gagal jika tidak tersedia)
Tentukan sifir SSL yang hendak digunakan untuk sambungan
Tentukan jenis sijil pelanggan (PEM, DER, ENG, P12)
Pin dan sahkan kunci awam pelayan (gaya HPKP)
Halakan semua trafik melalui pelayan proksi yang ditentukan
Halakan sambungan melalui proksi SOCKS5
Sediakan nama pengguna:kata laluan untuk pelayan proksi
Senarai hos yang tidak patut melalui proksi
Proksi SOCKS5 dengan resolusi DNS melalui proksi
Sijil CA untuk mengesahkan proksi HTTPS itu sendiri
Petakan pasangan host:port tertentu ke alamat IP tersuai
Sambung ke host:port yang berbeza daripada yang ditentukan URL
Tetapkan nombor port tempatan atau julat untuk sambungan
Ikat sambungan ke antara muka rangkaian tertentu
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
--cacertdengan sijil CA sebenar — ia lebih selamat dan lebih eksplisit.
$ curl -k https://localhost:8443/api/healthJangan 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
--cacertmemberitahu 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/datacurl --cert: Sijil Pelanggan (TLS Bersama)
- Apa yang dilakukannya
- Bendera
--certmenyediakan 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
--keymelainkan kunci tertanam dalam fail sijil.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Kunci Persendirian Sijil Pelanggan
- Apa yang dilakukannya
- Bendera
--keymenentukan 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/securecurl --tlsv1.2: Paksa TLS 1.2 Minimum
- Apa yang dilakukannya
- Bendera
--tlsv1.2memaksa 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.3memaksa 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/dataPilihan SSL/TLS Tambahan
Wajibkan SSL/TLS untuk sambungan (gagal jika tidak tersedia)
Tentukan sifir SSL yang hendak digunakan untuk sambungan
Tentukan jenis sijil pelanggan (PEM, DER, ENG, P12)
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_proxysebagai ganti.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Gunakan Proksi SOCKS5
- Apa yang dilakukannya
- Bendera
--socks5memberitahu 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-hostnameuntuk 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/datacurl --proxy-user: Pengesahan Proksi
- Apa yang dilakukannya
- Bendera
--proxy-user(atau-U) menghantar kelayakan pengesahan ke pelayan proksi. Formatnya ialahuser: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/datacurl --noproxy: Pintas Proksi untuk Hos Tertentu
- Apa yang dilakukannya
- Bendera
--noproxymenentukan senarai hos, domain, atau alamat IP yang dipisahkan koma yang harus memintas proksi dan menyambung secara langsung. Menyokong kad liar:*.example.comsepadan 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/apiPilihan Proksi Tambahan
Proksi SOCKS5 dengan resolusi DNS melalui proksi
Sijil CA untuk mengesahkan proksi HTTPS itu sendiri
curl --resolve: Resolusi DNS Tersuai
- Apa yang dilakukannya
- Bendera
--resolvemenyediakan alamat IP tersuai untuk pasanganhost:porttertentu, memintas carian DNS sepenuhnya. Formatnya ialahhost:port:address. Berbilang entri--resolveboleh 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/healthcurl --connect-to: Alihkan Sambungan ke Hos Berbeza
- Apa yang dilakukannya
- Bendera
--connect-tomengalihkan sambungan TCP ke pasanganhost:portyang berbeza sambil mengekalkan URL asal untuk permintaan HTTP (termasuk pengepalaHostdan 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/healthPilihan Rangkaian Tambahan
Tetapkan nombor port tempatan atau julat untuk sambungan
Ikat sambungan ke antara muka rangkaian tertentu
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/statusTLS 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/dataProksi 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/dataKontena 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/healthProksi 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/statusSoalan 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.