curl SSL, TLS & прокси конфигурация нұсқаулығы
curl-да HTTPS сертификаттарын, TLS нұсқаларын, проксилерді және реттелетін DNS шешімін конфигурациялау қауіпсіз API байланысы, CI/CD конвейерлері және желі мәселелерін жөндеу үшін маңызды. Бұл нұсқаулық SSL, TLS, прокси және желінің барлық жалаушаларын қамтиды — жергілікті әзірлеу үшін -k-мен сертификат тексеруін өшіруден --cert-пен өзара TLS орнатуға және SOCKS5 проксилері арқылы трафикті бағыттауға дейін. Әр опция нақты түсіндірмені, қауіпсіздік ескерулерін және көшіруге дайын мысалды қамтиды.
SSL & прокси жалаушаларының жылдам анықтамалығы
Қауіпсіз емес қосылымдарға рұқсат беру — барлық SSL тексеруді өткізіп жіберу
Сервер сертификатын белгілі бір CA файлына қарсы тексеру
Өзара TLS аутентификациясы үшін клиент сертификатын беру
Клиент сертификатының жеке кілт файлын беру
Қосылым үшін TLS 1.2 немесе одан жоғары нұсқасын қолдану
Қосылым үшін TLS 1.3 немесе одан жоғары нұсқасын қолдану
Қосылым үшін SSL/TLS талап ету (қолжетімді болмаса сәтсіз)
Қосылым үшін қандай SSL шифрлерін қолдану керектігін көрсету
Клиент сертификатының түрін көрсету (PEM, DER, ENG, P12)
Сервердің ашық кілтін бекіту және тексеру (HPKP стилі)
Барлық трафикті көрсетілген прокси сервер арқылы бағыттау
Қосылымды SOCKS5 прокси арқылы бағыттау
Прокси серверге username:password беру
Прокси арқылы өтпеуі керек хосттар тізімі
Прокси арқылы DNS шешімі бар SOCKS5 прокси
HTTPS проксидің өзін тексеру үшін CA сертификаты
Белгілі host:port жұбын реттелетін IP мекенжайға сәйкестендіру
URL-де көрсетілгеннен басқа host:port-қа қосылу
Қосылым үшін жергілікті порт нөмірін немесе диапазонын орнату
Қосылымды белгілі бір желі интерфейсіне байлау
Жүйе әдепкілерінің орнына реттелетін DNS серверлерін қолдану (c-ares)
curl -k: SSL сертификат қателерін елемеу
- Не істейді
-k(немесе--insecure) жалаушасы барлық SSL/TLS сертификат тексеруін өшіреді. curl сервер сертификатының сенімді CA-мен қол қойылғанын, хост атауы сәйкес келетінін немесе сертификат мерзімі біткенін тексермейді.- Қашан қолдану керек
- Өзі қол қойған сертификаттармен жергілікті әзірлеу немесе сынақ орталарында ғана қолданыңыз. Staging/production үшін нақты CA сертификатымен
--cacertқолданыңыз — бұл қауіпсізірек және анағұрлым анық.
$ curl -k https://localhost:8443/api/healthProduction сценарийлерде немесе 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/datacurl --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/securecurl --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/securecurl --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/dataSSL/TLS қосымша опциялары
Қосылым үшін SSL/TLS талап ету (қолжетімді болмаса сәтсіз)
Қосылым үшін қандай SSL шифрлерін қолдану керектігін көрсету
Клиент сертификатының түрін көрсету (PEM, DER, ENG, P12)
Сервердің ашық кілтін бекіту және тексеру (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/datacurl --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/datacurl --proxy-user: прокси аутентификациясы
- Не істейді
--proxy-user(немесе-U) жалаушасы прокси серверге аутентификация деректемелерін жібереді. Форматыuser:password. Бұл сервер аутентификациясынан (-u) бөлек.- Қашан қолдану керек
- Прокси сервер аутентификация талап еткенде қажет — корпоративтік және кәсіпорын желі орталарында жиі кездеседі. Деректемелер мақсатты серверге емес, проксиге жіберіледі.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: белгілі хосттар үшін проксиді айналып өту
- Не істейді
--noproxyжалаушасы проксиді айналып өтіп тікелей қосылуы керек хосттардың, домендердің немесе IP мекенжайларының үтірмен бөлінген тізімін көрсетеді. Қойылмалы таңбаларды қолдайды:*.example.comбарлық қосымша домендерге сәйкес келеді.- Қашан қолдану керек
- localhost, ішкі қызметтер немесе белгілі домендерді проксиден шығару үшін қолданыңыз. Прокси орта айнымалылары арқылы жаһандық түрде орнатылған, бірақ кейбір хосттарға (жергілікті қызметтер сияқты) тікелей кіру қажет болғанда маңызды. Барлық хосттар үшін проксиді айналып өту үшін
*қолданыңыз.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiПрокси қосымша опциялары
Прокси арқылы DNS шешімі бар SOCKS5 прокси
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/healthcurl --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Желі қосымша опциялары
Қосылым үшін жергілікті порт нөмірін немесе диапазонын орнату
Қосылымды белгілі бір желі интерфейсіне байлау
Жүйе әдепкілерінің орнына реттелетін 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/healthSSH туннелі арқылы SOCKS5 прокси
ssh -D арқылы SOCKS5 прокси жасап, --socks5 қолданып curl трафигін ол арқылы бағыттаңыз. Бастион хост арқылы ішкі қызметтерге кіру үшін пайдалы.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statuscurl 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 қолданыңыз.