curl SSL, TLS & прокси конфигурация нұсқаулығы

curl-да HTTPS сертификаттарын, TLS нұсқаларын, проксилерді және реттелетін DNS шешімін конфигурациялау қауіпсіз API байланысы, CI/CD конвейерлері және желі мәселелерін жөндеу үшін маңызды. Бұл нұсқаулық SSL, TLS, прокси және желінің барлық жалаушаларын қамтиды — жергілікті әзірлеу үшін -k-мен сертификат тексеруін өшіруден --cert-пен өзара TLS орнатуға және SOCKS5 проксилері арқылы трафикті бағыттауға дейін. Әр опция нақты түсіндірмені, қауіпсіздік ескерулерін және көшіруге дайын мысалды қамтиды.

SSL & прокси жалаушаларының жылдам анықтамалығы

-kSSL/TLS

Қауіпсіз емес қосылымдарға рұқсат беру — барлық SSL тексеруді өткізіп жіберу

--cacertSSL/TLS

Сервер сертификатын белгілі бір CA файлына қарсы тексеру

--certSSL/TLS

Өзара TLS аутентификациясы үшін клиент сертификатын беру

--keySSL/TLS

Клиент сертификатының жеке кілт файлын беру

--tlsv1.2SSL/TLS

Қосылым үшін TLS 1.2 немесе одан жоғары нұсқасын қолдану

--tlsv1.3SSL/TLS

Қосылым үшін TLS 1.3 немесе одан жоғары нұсқасын қолдану

--ssl-reqdSSL/TLS

Қосылым үшін SSL/TLS талап ету (қолжетімді болмаса сәтсіз)

--ciphersSSL/TLS

Қосылым үшін қандай SSL шифрлерін қолдану керектігін көрсету

--cert-typeSSL/TLS

Клиент сертификатының түрін көрсету (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Сервердің ашық кілтін бекіту және тексеру (HPKP стилі)

-xПрокси

Барлық трафикті көрсетілген прокси сервер арқылы бағыттау

--socks5Прокси

Қосылымды SOCKS5 прокси арқылы бағыттау

--proxy-userПрокси

Прокси серверге username:password беру

--noproxyПрокси

Прокси арқылы өтпеуі керек хосттар тізімі

--socks5-hostnameПрокси

Прокси арқылы DNS шешімі бар SOCKS5 прокси

--proxy-cacertПрокси

HTTPS проксидің өзін тексеру үшін CA сертификаты

--resolveЖелі

Белгілі host:port жұбын реттелетін IP мекенжайға сәйкестендіру

--connect-toЖелі

URL-де көрсетілгеннен басқа host:port-қа қосылу

--local-portЖелі

Қосылым үшін жергілікті порт нөмірін немесе диапазонын орнату

--interfaceЖелі

Қосылымды белгілі бір желі интерфейсіне байлау

--dns-serversЖелі

Жүйе әдепкілерінің орнына реттелетін DNS серверлерін қолдану (c-ares)

curl -k: SSL сертификат қателерін елемеу

Не істейді
-k (немесе --insecure) жалаушасы барлық SSL/TLS сертификат тексеруін өшіреді. curl сервер сертификатының сенімді CA-мен қол қойылғанын, хост атауы сәйкес келетінін немесе сертификат мерзімі біткенін тексермейді.
Қашан қолдану керек
Өзі қол қойған сертификаттармен жергілікті әзірлеу немесе сынақ орталарында ғана қолданыңыз. Staging/production үшін нақты CA сертификатымен --cacert қолданыңыз — бұл қауіпсізірек және анағұрлым анық.
$ curl -k https://localhost:8443/api/health

Production сценарийлерде немесе CI/CD конвейерлерде -k ешқашан қолданбаңыз. Ол барлық сертификат тексеруін өшіреді, қосылымыңызды ортадағы адам (man-in-the-middle) шабуылдарына осал етеді. Оның орнына белгілі бір CA-ны сенімді ету үшін --cacert қолданыңыз.

curl --cacert: реттелетін CA сертификатын қолдану

Не істейді
--cacert жалаушасы curl-ға жүйенің әдепкі сенімді қоймасының орнына PEM форматындағы нақты CA (Сертификаттау Органы) файлына қарсы сервердің SSL сертификатын тексеруді нұсқайды.
Қашан қолдану керек
Серверіңіз жүйенің сенімді қоймасында жоқ жеке немесе ішкі CA-мен қол қойылған сертификатты қолданғанда қолданыңыз. Бұл корпоративтік орталарда, Kubernetes кластерлерінде және ішкі PKI бар Docker конфигурацияларында жиі кездеседі.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: клиент сертификаты (өзара TLS)

Не істейді
--cert жалаушасы өзара TLS (mTLS) үшін клиент жағындағы сертификатты береді. mTLS-те сервер де, клиент те бір-бірінің жеке басын растау үшін сертификаттар ұсынады. Сертификат файлы PEM немесе PKCS#12 форматында болуы керек.
Қашан қолдану керек
Сервер клиент сертификатымен аутентификацияны талап еткенде қажет — банк API-лерінде, мемлекеттік қызметтерде, IoT құрылғыларының байланысында және нөлдік сенім архитектураларында жиі кездеседі. Кілт сертификат файлына ендірілмеген болса, әрқашан --key-мен жұптаңыз.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: клиент сертификатының жеке кілті

Не істейді
--key жалаушасы --cert-пен берілген клиент сертификатымен жұпталатын жеке кілт файлын көрсетеді. Кілт сертификатқа сәйкес келуі керек. Кілт құпия сөзбен қорғалған болса, curl құпия фразаны сұрайды (немесе --pass қолданыңыз).
Қашан қолдану керек
Әрқашан --cert-пен бірге қолданыңыз. Жеке кілт сертификат файлына әлдеқашан ендірілген болса (PKCS#12 / .p12 файлдарында жиі кездеседі), --key-ді қалдыруға болады.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: TLS 1.2 минимумын мәжбүрлеу

Не істейді
--tlsv1.2 жалаушасы curl-ды SSL/TLS қол алысу үшін TLS 1.2-ні ең төменгі қабылданатын нұсқа ретінде қолдануға мәжбүрлейді. Ескі хаттамалар (TLS 1.0, 1.1, SSLv3) қабылданбайды.
Қашан қолдану керек
Ең төменгі қауіпсіздік стандартын орнату үшін қолданыңыз. TLS 1.2 PCI-DSS сәйкестігі үшін қажет және барлық заманауи серверлер қолдайды. curl-дың заманауи жинақтарының көпшілігі әдепкі бойынша TLS 1.2+ қолданады, бірақ бұл жалауша оны анық етеді.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: TLS 1.3 минимумын мәжбүрлеу

Не істейді
--tlsv1.3 жалаушасы curl-ды TLS 1.3 — ең жылдам және қауіпсіз TLS нұсқасын қолдануға мәжбүрлейді. TLS 1.3 қол алысудағы қосымша айналымды жояды (0-RTT қолдауы) және барлық ескірген шифр жиынтықтарын алып тастайды.
Қашан қолдану керек
Сервер TLS 1.3-ті қолдайтынын білгенде және ең жақсы өнімділік пен қауіпсіздік қажет болғанда қолданыңыз. Ескерту: TLS 1.3 OpenSSL 1.1.1+ немесе үйлесімді TLS кітапханасын қажет етеді. Барлық серверлер оны әлі қолдай бермейді.
$ curl --tlsv1.3 https://modern-api.example.com/data

SSL/TLS қосымша опциялары

--ssl-reqd

Қосылым үшін SSL/TLS талап ету (қолжетімді болмаса сәтсіз)

--ciphers

Қосылым үшін қандай SSL шифрлерін қолдану керектігін көрсету

--cert-type

Клиент сертификатының түрін көрсету (PEM, DER, ENG, P12)

--pinnedpubkey

Сервердің ашық кілтін бекіту және тексеру (HPKP стилі)

curl -x: HTTP/HTTPS проксиін қолдану

Не істейді
-x (немесе --proxy) жалаушасы curl-дың барлық трафигін көрсетілген прокси сервер арқылы бағыттайды. Форматы [protocol://]host[:port]. Қолдау көрсетілетін прокси хаттамалары: HTTP, HTTPS, SOCKS4, SOCKS5.
Қашан қолдану керек
Корпоративтік прокси серверлер, Fiddler, Charles немесе mitmproxy сияқты құралдармен жөндеу, географиялық шектеулерді тексеру немесе тікелей интернет қолжетімді болмағанда қолданыңыз. Оның орнына http_proxy / https_proxy орта айнымалыларын да орнатуға болады.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: SOCKS5 проксиін қолдану

Не істейді
--socks5 жалаушасы curl-ға TCP қосылымы үшін SOCKS5 проксиін қолдануды нұсқайды. HTTP проксилерінен айырмашылығы, SOCKS5 TCP деңгейінде жұмыс істейді және тек HTTP емес, кез келген хаттаманы өңдей алады. DNS шешімі әдепкі бойынша жергілікті түрде жүзеге асады; прокси арқылы DNS шешу үшін --socks5-hostname қолданыңыз.
Қашан қолдану керек
SSH туннельдері (ssh -D), Tor желісіне кіру немесе прокси HTTP емес хаттамаларды өңдеуі тиіс болғанда қолданыңыз. SOCKS5 UDP-ні қолдайды және DNS-ті де өңдей алады — HTTP проксилерінен икемдірек.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: прокси аутентификациясы

Не істейді
--proxy-user (немесе -U) жалаушасы прокси серверге аутентификация деректемелерін жібереді. Форматы user:password. Бұл сервер аутентификациясынан (-u) бөлек.
Қашан қолдану керек
Прокси сервер аутентификация талап еткенде қажет — корпоративтік және кәсіпорын желі орталарында жиі кездеседі. Деректемелер мақсатты серверге емес, проксиге жіберіледі.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: белгілі хосттар үшін проксиді айналып өту

Не істейді
--noproxy жалаушасы проксиді айналып өтіп тікелей қосылуы керек хосттардың, домендердің немесе IP мекенжайларының үтірмен бөлінген тізімін көрсетеді. Қойылмалы таңбаларды қолдайды: *.example.com барлық қосымша домендерге сәйкес келеді.
Қашан қолдану керек
localhost, ішкі қызметтер немесе белгілі домендерді проксиден шығару үшін қолданыңыз. Прокси орта айнымалылары арқылы жаһандық түрде орнатылған, бірақ кейбір хосттарға (жергілікті қызметтер сияқты) тікелей кіру қажет болғанда маңызды. Барлық хосттар үшін проксиді айналып өту үшін * қолданыңыз.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Прокси қосымша опциялары

--socks5-hostname

Прокси арқылы DNS шешімі бар SOCKS5 прокси

--proxy-cacert

HTTPS проксидің өзін тексеру үшін CA сертификаты

curl --resolve: реттелетін DNS шешімі

Не істейді
--resolve жалаушасы белгілі бір host:port жұбы үшін реттелетін IP мекенжай береді, DNS іздеуді толығымен айналып өтеді. Форматы host:port:address. Бірнеше --resolve жазбасын беруге болады.
Қашан қолдану керек
DNS таралуынан бұрын тексеру, жүктеме теңестіргіш артындағы белгілі бір серверді тексеру немесе SSL сертификат тексеруі үшін нақты хост атауы қажет жергілікті әзірлеу үшін маңызды. /etc/hosts файлын өңдеуден айырмашылығы, бұл сұраным деңгейінде және порт бойынша нақты.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: қосылымды басқа хостқа бағыттау

Не істейді
--connect-to жалаушасы HTTP сұранымы үшін (Host тақырыбы мен SNI қоса) бастапқы URL-ді сақтай отырып, TCP қосылымын басқа host:port жұбына бағыттайды. Формат: HOST1:PORT1:HOST2:PORT2.
Қашан қолдану керек
DNS-ті немесе /etc/hosts-ты өзгертпей жүктеме теңестіргіш артындағы белгілі бір сервер серверін тексеру үшін қолданыңыз. --resolve-дан айырмашылығы, бұл host:port-ты host:port-қа (IP-ге емес) сәйкестендіреді, бұл мақсатта да хост атауы болған кезде пайдалы.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Желі қосымша опциялары

--local-port

Қосылым үшін жергілікті порт нөмірін немесе диапазонын орнату

--interface

Қосылымды белгілі бір желі интерфейсіне байлау

--dns-servers

Жүйе әдепкілерінің орнына реттелетін DNS серверлерін қолдану (c-ares)

Нақты SSL & прокси сценарийлері

Бұл мысалдар әзірлеу, CI/CD және production орталарындағы жиі қауіпсіздік пен желі тапсырмаларын орындау үшін бірнеше жалаушаны біріктіреді.

Localhost-та HTTPS тексеру

Өзі қол қойған сертификатпен жергілікті әзірлеу кезінде --resolve-ді --cacert-пен (немесе жылдам тексеру үшін -k-мен) біріктіріңіз. Бұл hosts файлын өзгертпей дұрыс SSL/SNI үшін нақты хост атауын қолдануға мүмкіндік береді.

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

Өзара TLS (клиент сертификатымен аутентификация)

Кейбір API-лер сервер мен клиенттің екеуінің де сертификат ұсынуын талап етеді. Толық тексерілген екі жақты TLS қосылымын орнату үшін --cert, --key және --cacert беріңіз.

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

Аутентификациямен корпоративтік прокси

Міндетті прокси серверлері бар корпоративтік желілерде прокси деректемелері үшін -x-ті -U-мен біріктіріңіз. Ішкі қызметтерді проксиден шығару үшін --noproxy қосыңыз.

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

Ішкі CA бар Docker контейнері

Docker-дегі қызметтер ішкі CA сертификаттарын қолданғанда, CA сертификатын контейнерге орнатып, --cacert-пен сілтеме жасаңыз. Бұл -k-ден қауіпсізірек, себебі сертификат тізбегін тексеруді жалғастырады.

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

SSH туннелі арқылы SOCKS5 прокси

ssh -D арқылы SOCKS5 прокси жасап, --socks5 қолданып curl трафигін ол арқылы бағыттаңыз. Бастион хост арқылы ішкі қызметтерге кіру үшін пайдалы.

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

curl SSL & прокси туралы жиі қойылатын сұрақтар

curl-да SSL сертификат тексеруін қалай өткізіп жіберуге болады?

curl -k URL немесе curl --insecure URL қолданыңыз. Бұл барлық сертификат тексерулерін өшіреді — мерзім біту, хост атауының сәйкес келмеуі, сенімсіз CA. Жергілікті әзірлеу үшін ғана қолданыңыз. Production үшін нақты CA сертификатымен --cacert қолданыңыз.

curl-ға өзі қол қойған сертификатқа сенуді қалай орнатуға болады?

Өзі қол қойған сертификатыңызға қол қойған CA сертификатын көрсету үшін curl --cacert /path/to/ca.pem URL қолданыңыз. Бұл -k-ден қауіпсізірек, себебі сертификат тізбегін тексеруді жалғастырады — тек сіздің нақты CA-ға ғана сенеді.

curl қандай TLS нұсқасын қолданып жатқанын қалай тексеруге болады?

curl -v URL іске қосыңыз және толық шығыстағы * SSL connection using TLSv1.x / CipherSuite жолын іздеңіз. Белгілі бір нұсқаны мәжбүрлеу үшін --tlsv1.2 немесе --tlsv1.3 қолданыңыз.

Өзара TLS (mTLS) дегеніміз не және curl-мен қалай қолданамын?

Өзара TLS сервер мен клиенттің екеуінің де сертификат ұсынуын талап етеді. Қолданыңыз: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. --cert/--key жұбы клиентті аутентификациялайды; --cacert серверді тексереді.

HTTP прокси арқылы curl-ды қалай қолдануға болады?

curl -x http://proxy:port URL қолданыңыз. HTTPS прокси үшін: curl -x https://proxy:port URL. Баламалы түрде http_proxy және https_proxy орта айнымалыларын орнатыңыз — curl оларды автоматты түрде алады.

SOCKS5 прокси арқылы curl-ды қалай қолдануға болады?

Жергілікті DNS шешімі үшін curl --socks5 host:port URL, немесе прокси арқылы DNS шешу үшін curl --socks5-hostname host:port URL қолданыңыз (құпиялылық/Tor үшін маңызды). SSH туннелі мысалы: ssh -D 1080 user@bastion, содан кейін curl --socks5 localhost:1080 URL.

curl-да прокси сервермен қалай аутентификация жасауға болады?

curl -x http://proxy:port -U user:password URL қолданыңыз. -U (немесе --proxy-user) жалаушасы деректемелерді проксиге жібереді. Бұл мақсатты сервермен аутентификация жасайтын -u-дан бөлек.

curl-да белгілі хосттарды проксиден қалай шығаруға болады?

--noproxy "localhost,127.0.0.1,*.internal.com" қолданыңыз немесе NO_PROXY орта айнымалысын орнатыңыз. Қойылмалы таңбаларды қолдайды (*.example.com). Бір сұраным үшін проксиді толығымен айналып өту үшін --noproxy "*" қолданыңыз.

curl-мен localhost-та HTTPS-ті қалай тексеруге болады?

Жылдам тексеру үшін: curl -k https://localhost:8443/. Дұрыс тексеру үшін: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. --resolve тәсілі сертификат хост атауының дұрыс сәйкес келуіне мүмкіндік береді.

curl-да белгілі хост үшін DNS шешімін қалай қайта анықтауға болады?

curl --resolve host:port:IP URL қолданыңыз. Мысал: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Бұл тек сол host:port жұбы үшін DNS-ті айналып өтеді — /etc/hosts файлын өңдеу қажет емес.

curl-дағы 'SSL certificate problem: certificate has expired' қатесін қалай түзетуге болады?

Сервер сертификатының мерзімі біткен. Шешімдер: (1) Серверде сертификатты жаңартыңыз, (2) CA файлын жаңартыңыз: curl --cacert /path/to/updated-ca.pem URL, (3) Тек тексеру үшін: curl -k URL. Мерзімді тексеру: curl -v URL 2>&1 | grep expire.

Production-да curl --insecure (-k) қолдану қауіпсіз бе?

Жоқ. -k жалаушасы барлық сертификат тексеруін өшіреді — мерзім, хост атауы және сенім тізбегі. Бұл қосылымыңызды ортадағы адам шабуылдарына осал етеді. Production мен CI/CD конвейерлерінде әрқашан нақты CA сертификатымен --cacert қолданыңыз.