Водич за конфигурацију SSL, TLS и Proxy у curl

Конфигурисање HTTPS сертификата, верзија TLS, прокси сервера и прилагођеног DNS разрешавања у curl је неопходно за безбедну API комуникацију, CI/CD пајплајне и дебаговање мрежних проблема. Овај водич покрива све SSL, TLS, proxy и мрежне опције — од онемогућавања провере сертификата помоћу -k за локални развој до подешавања узајамног TLS са --cert и усмеравања саобраћаја кроз SOCKS5 прокси. Свака опција укључује јасно објашњење, безбедносне напомене и пример спреман за копирање.

Брзи преглед SSL и Proxy опција

-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 стил)

-xProxy

Усмерити сав саобраћај кроз наведени прокси сервер

Усмерити конекцију кроз SOCKS5 прокси

Навести корисничко_име:лозинку за прокси сервер

Листа хостова који не треба да пролазе кроз прокси

--socks5-hostnameProxy

SOCKS5 прокси са DNS разрешавањем кроз прокси

--proxy-cacertProxy

CA сертификат за верификацију самог HTTPS проксија

--resolveМрежа

Мапирати одређени пар host:port на прилагођену IP адресу

--connect-toМрежа

Повезати се на други host:port од оног у URL-у

--local-portМрежа

Подесити број или опсег локалног порта за конекцију

--interfaceМрежа

Везати конекцију за одређени мрежни интерфејс

--dns-serversМрежа

Користити прилагођене DNS сервере уместо системских подразумеваних (c-ares)

curl -k: Игнорисање грешака SSL сертификата

Шта ради
Опција -k (или --insecure) искључује сву верификацију SSL/TLS сертификата. curl неће проверавати да ли је сертификат сервера потписан поузданом CA, да ли се hostname поклапа или да ли је сертификат истекао.
Када користити
Користите само за локални развој са self-signed сертификатима или тестна окружења. За staging/продукцију, користите --cacert са стварним CA сертификатом — то је и безбедније и експлицитније.
$ curl -k https://localhost:8443/api/health

Никада не користите -k у продукцијским скриптама или CI/CD пајплајнима. Искључује сву валидацију сертификата, чинећи вашу конекцију рањивом на man-in-the-middle нападе. Користите --cacert за поверење одређеној CA.

curl --cacert: Коришћење прилагођеног CA сертификата

Шта ради
Опција --cacert говори curl-у да верификује SSL сертификат сервера према одређеном CA (Certificate Authority) пакету у PEM формату, уместо подразумеваног системског складишта поверења.
Када користити
Користите када ваш сервер користи сертификат потписан приватном или интерном CA која није у системском складишту поверења. Ово је уобичајено у корпоративним окружењима, Kubernetes кластерима и Docker подешавањима са интерним PKI.
$ 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 да користи TLS 1.2 као минималну прихватљиву верзију за SSL/TLS руковање. Старији протоколи (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 елиминише додатни round-trip у руковању (подршка за 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-у да користи SOCKS5 прокси за TCP конекцију. За разлику од HTTP проксија, SOCKS5 ради на TCP нивоу и може обрадити било који протокол — не само HTTP. DNS разрешавање се подразумевано ради локално; користите --socks5-hostname за разрешавање DNS кроз прокси.
Када користити
Користите за 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).
Када користити
Потребно када прокси сервер захтева аутентификацију — уобичајено у корпоративним и enterprise мрежним окружењима. Подаци се шаљу на прокси, не на циљни сервер.
$ 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

Додатне Proxy опције

--socks5-hostname

SOCKS5 прокси са DNS разрешавањем кроз прокси

--proxy-cacert

CA сертификат за верификацију самог HTTPS проксија

curl --resolve: Прилагођено DNS разрешавање

Шта ради
Опција --resolve обезбеђује прилагођену IP адресу за одређени пар host:port, потпуно заобилазећи DNS упит. Формат је host:port:address. Може се навести више --resolve уноса.
Када користити
Неопходно за тестирање пре DNS пропагације, верификацију одређеног backend-а иза load balancer-а или локални развој где вам треба стварни hostname за валидацију SSL сертификата. За разлику од уређивања /etc/hosts, ово је по захтеву и специфично за порт.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Преусмеравање конекције на други хост

Шта ради
Опција --connect-to преусмерава TCP конекцију на други пар host:port задржавајући оригинални URL за HTTP захтев (укључујући заглавље Host и SNI). Формат: HOST1:PORT1:HOST2:PORT2.
Када користити
Користите за тестирање одређеног backend сервера иза load balancer-а без мењања DNS или /etc/hosts. За разлику од --resolve, ово мапира host:port на host:port (не на IP), што је корисно када циљ такође има hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Додатне мрежне опције

--local-port

Подесити број или опсег локалног порта за конекцију

--interface

Везати конекцију за одређени мрежни интерфејс

--dns-servers

Користити прилагођене DNS сервере уместо системских подразумеваних (c-ares)

Практични SSL и Proxy сценарији

Ови примери комбинују више опција за решавање уобичајених безбедносних и мрежних задатака у развојним, CI/CD и продукцијским окружењима.

Тестирање HTTPS на localhost

При локалном развоју са self-signed сертификатом, комбинујте --resolve са --cacert (или -k за брзо тестирање). Ово вам омогућава коришћење стварног hostname-а за исправан SSL/SNI без мењања hosts фајла.

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

Узајамни TLS (аутентификација клијентским сертификатом)

Неки API-ји захтевају да и сервер и клијент представе сертификате. Наведите --cert, --key и --cacert за успостављање потпуно верификоване двосмерне TLS конекције.

$ 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

Docker контејнер са интерном CA

Када сервиси у Docker-у користе сертификате од интерне CA, монтирајте CA сертификат у контејнер и референцирајте га помоћу --cacert. Ово је безбедније од -k јер и даље валидира ланац сертификата.

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

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

Креирајте SOCKS5 прокси помоћу ssh -D и усмерите curl саобраћај кроз њега користећи --socks5. Ово је корисно за приступ интерним сервисима кроз bastion host.

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

Често постављана питања о SSL и Proxy у curl

Како прескочити верификацију SSL сертификата у curl?

Користите curl -k URL или curl --insecure URL. Ово искључује све провере сертификата — истек, неслагање hostname-а, непоуздана CA. Користите само за локални развој. За продукцију, користите --cacert са стварним CA сертификатом.

Како натерати curl да верује self-signed сертификату?

Користите curl --cacert /path/to/ca.pem URL за навођење CA сертификата који је потписао ваш self-signed сертификат. Ово је безбедније од -k јер и даље валидира ланац сертификата — верујући само вашој специфичној CA.

Како проверити коју верзију TLS curl користи?

Покрените 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 верификује сервер.

Како користити curl кроз HTTP прокси?

Користите curl -x http://proxy:port URL. За HTTPS прокси: curl -x https://proxy:port URL. Алтернативно, подесите променљиве окружења http_proxy и https_proxy — curl их аутоматски препознаје.

Како користити curl са SOCKS5 проксијем?

Користите curl --socks5 host:port URL за локално DNS разрешавање, или curl --socks5-hostname host:port URL за разрешавање DNS кроз прокси (важно за приватност/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 "*" за потпуно заобилажење проксија за један захтев.

Како тестирати HTTPS на localhost помоћу curl?

За брзо тестирање: curl -k https://localhost:8443/. За исправну валидацију: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Приступ са --resolve омогућава да се hostname сертификата исправно поклопи.

Како заменити DNS разрешавање за одређени хост у curl?

Користите curl --resolve host:port:IP URL. Пример: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Ово заобилази DNS само за тај пар host:port — без потребе за уређивањем /etc/hosts.

Како поправити 'SSL certificate problem: certificate has expired' у curl?

Сертификат сервера је истекао. Решења: (1) Обновити сертификат на серверу, (2) Ажурирати CA пакет: curl --cacert /path/to/updated-ca.pem URL, (3) Само за тестирање: curl -k URL. Проверити истек: curl -v URL 2>&1 | grep expire.

Да ли је безбедно користити curl --insecure (-k) у продукцији?

Не. Опција -k искључује сву валидацију сертификата — истек, hostname и ланац поверења. Ово чини вашу конекцију рањивом на man-in-the-middle нападе. Увек користите --cacert са специфичним CA сертификатом у продукцији и CI/CD пајплајнима.