Водич за конфигурацију SSL, TLS и Proxy у curl
Конфигурисање HTTPS сертификата, верзија TLS, прокси сервера и прилагођеног DNS разрешавања у curl је неопходно за безбедну API комуникацију, CI/CD пајплајне и дебаговање мрежних проблема. Овај водич покрива све SSL, TLS, proxy и мрежне опције — од онемогућавања провере сертификата помоћу -k за локални развој до подешавања узајамног TLS са --cert и усмеравања саобраћаја кроз SOCKS5 прокси. Свака опција укључује јасно објашњење, безбедносне напомене и пример спреман за копирање.
Брзи преглед SSL и Proxy опција
Дозволити небезбедне конекције — прескочити сву SSL верификацију
Верификовати сертификат сервера према одређеном CA пакету
Обезбедити клијентски сертификат за узајамну TLS аутентификацију
Навести фајл приватног кључа за клијентски сертификат
Користити TLS верзију 1.2 или вишу за конекцију
Користити TLS верзију 1.3 или вишу за конекцију
Захтевати SSL/TLS за конекцију (пропасти ако није доступно)
Навести које SSL шифре користити за конекцију
Навести тип клијентског сертификата (PEM, DER, ENG, P12)
Закачити и верификовати јавни кључ сервера (HPKP стил)
Усмерити сав саобраћај кроз наведени прокси сервер
Усмерити конекцију кроз SOCKS5 прокси
Навести корисничко_име:лозинку за прокси сервер
Листа хостова који не треба да пролазе кроз прокси
SOCKS5 прокси са DNS разрешавањем кроз прокси
CA сертификат за верификацију самог HTTPS проксија
Мапирати одређени пар host:port на прилагођену IP адресу
Повезати се на други host:port од оног у URL-у
Подесити број или опсег локалног порта за конекцију
Везати конекцију за одређени мрежни интерфејс
Користити прилагођене 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/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 да користи 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/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-у да користи 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/datacurl --proxy-user: Аутентификација на проксију
- Шта ради
- Опција
--proxy-user(или-U) шаље аутентификационе податке прокси серверу. Формат јеuser:password. Ово је одвојено од аутентификације на серверу (-u). - Када користити
- Потребно када прокси сервер захтева аутентификацију — уобичајено у корпоративним и enterprise мрежним окружењима. Подаци се шаљу на прокси, не на циљни сервер.
$ 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Додатне Proxy опције
SOCKS5 прокси са DNS разрешавањем кроз прокси
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/healthcurl --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Додатне мрежне опције
Подесити број или опсег локалног порта за конекцију
Везати конекцију за одређени мрежни интерфејс
Користити прилагођене 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/dataDocker контејнер са интерном CA
Када сервиси у Docker-у користе сертификате од интерне CA, монтирајте CA сертификат у контејнер и референцирајте га помоћу --cacert. Ово је безбедније од -k јер и даље валидира ланац сертификата.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthSOCKS5 прокси преко 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 пајплајнима.