Οδηγός ρύθμισης curl SSL, TLS & Proxy

Η ρύθμιση πιστοποιητικών HTTPS, εκδόσεων TLS, proxies και προσαρμοσμένης ανάλυσης DNS στο curl είναι ουσιαστική για ασφαλή επικοινωνία API, CI/CD pipelines και αντιμετώπιση προβλημάτων δικτύου. Αυτός ο οδηγός καλύπτει όλα τα flags SSL, TLS, proxy και δικτύου — από την απενεργοποίηση ελέγχου πιστοποιητικών με -k έως τη ρύθμιση mutual TLS με --cert και τη δρομολόγηση κίνησης μέσω SOCKS5 proxies. Κάθε επιλογή περιλαμβάνει σαφή εξήγηση, σημειώσεις ασφαλείας και ένα έτοιμο προς αντιγραφή παράδειγμα.

Γρήγορη αναφορά flags SSL & Proxy

-kSSL/TLS

Επιτρέπει μη ασφαλείς συνδέσεις — παράκαμψη κάθε ελέγχου SSL

--cacertSSL/TLS

Επαλήθευση πιστοποιητικού server έναντι συγκεκριμένου CA bundle

--certSSL/TLS

Καθορισμός πιστοποιητικού πελάτη για αυθεντικοποίηση mutual TLS

--keySSL/TLS

Καθορισμός αρχείου ιδιωτικού κλειδιού για το πιστοποιητικό πελάτη

--tlsv1.2SSL/TLS

Χρήση TLS έκδοσης 1.2 ή νεότερης για τη σύνδεση

--tlsv1.3SSL/TLS

Χρήση TLS έκδοσης 1.3 ή νεότερης για τη σύνδεση

--ssl-reqdSSL/TLS

Απαίτηση SSL/TLS για τη σύνδεση (σφάλμα αν δεν είναι διαθέσιμο)

--ciphersSSL/TLS

Καθορισμός ποιων SSL ciphers θα χρησιμοποιηθούν για τη σύνδεση

--cert-typeSSL/TLS

Καθορισμός τύπου πιστοποιητικού πελάτη (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Pinning και επαλήθευση δημόσιου κλειδιού server (στυλ HPKP)

-xProxy

Δρομολόγηση όλης της κίνησης μέσω του καθορισμένου proxy server

Δρομολόγηση σύνδεσης μέσω SOCKS5 proxy

Καθορισμός ονόματος χρήστη:κωδικού για τον proxy server

Λίστα hosts που δεν πρέπει να δρομολογηθούν μέσω proxy

--socks5-hostnameProxy

SOCKS5 proxy με ανάλυση DNS μέσω του proxy

--proxy-cacertProxy

Πιστοποιητικό CA για επαλήθευση του ίδιου του HTTPS proxy

--resolveΔίκτυο

Αντιστοίχιση ζεύγους host:port σε προσαρμοσμένη διεύθυνση IP

--connect-toΔίκτυο

Σύνδεση σε διαφορετικό host:port από αυτό που καθορίζει η URL

--local-portΔίκτυο

Ορισμός αριθμού ή εύρους τοπικής θύρας για τη σύνδεση

--interfaceΔίκτυο

Δέσμευση σύνδεσης σε συγκεκριμένο δικτυακό interface

--dns-serversΔίκτυο

Χρήση προσαρμοσμένων DNS servers αντί για προεπιλογή συστήματος (c-ares)

curl -k: Αγνόηση σφαλμάτων SSL πιστοποιητικού

Τι κάνει
Το flag -k--insecure) απενεργοποιεί κάθε επαλήθευση πιστοποιητικού SSL/TLS. Το curl δεν θα ελέγξει αν το πιστοποιητικό του server είναι υπογεγραμμένο από αξιόπιστη CA, αν το hostname ταιριάζει ή αν το πιστοποιητικό έχει λήξει.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε μόνο για τοπική ανάπτυξη με self-signed πιστοποιητικά ή σε δοκιμαστικά περιβάλλοντα. Για staging/production, χρησιμοποιήστε --cacert με το πραγματικό πιστοποιητικό CA αντί αυτού — είναι πιο ασφαλές και πιο ρητό.
$ curl -k https://localhost:8443/api/health

Μην χρησιμοποιείτε ποτέ -k σε scripts production ή CI/CD pipelines. Απενεργοποιεί κάθε επικύρωση πιστοποιητικού, καθιστώντας τη σύνδεσή σας ευάλωτη σε επιθέσεις man-in-the-middle. Χρησιμοποιήστε --cacert για να εμπιστευτείτε μια συγκεκριμένη CA αντί αυτού.

curl --cacert: Χρήση προσαρμοσμένου πιστοποιητικού CA

Τι κάνει
Το flag --cacert λέει στο curl να επαληθεύσει το SSL πιστοποιητικό του server έναντι ενός συγκεκριμένου αρχείου CA (Certificate Authority) bundle σε μορφή PEM, αντί του system trust store.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε όταν ο server σας χρησιμοποιεί πιστοποιητικό υπογεγραμμένο από ιδιωτική ή εσωτερική CA που δεν βρίσκεται στο system trust store. Αυτό είναι συνηθισμένο σε εταιρικά περιβάλλοντα, Kubernetes clusters και Docker setups με εσωτερικό PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: Πιστοποιητικό πελάτη (Mutual TLS)

Τι κάνει
Το flag --cert παρέχει ένα πιστοποιητικό πελάτη για mutual TLS (mTLS). Στο mTLS, τόσο ο server όσο και ο πελάτης παρουσιάζουν πιστοποιητικά για να επαληθεύσουν την ταυτότητα του άλλου. Το αρχείο πιστοποιητικού πρέπει να είναι σε μορφή PEM ή PKCS#12.
Πότε να χρησιμοποιηθεί
Απαιτείται όταν ο server απαιτεί αυθεντικοποίηση πιστοποιητικού πελάτη — συνηθισμένο σε τραπεζικά APIs, κυβερνητικές υπηρεσίες, επικοινωνία συσκευών IoT και αρχιτεκτονικές zero-trust. Συνδυάζετε πάντα με --key εκτός αν το κλειδί είναι ενσωματωμένο στο αρχείο πιστοποιητικού.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Ιδιωτικό κλειδί πιστοποιητικού πελάτη

Τι κάνει
Το flag --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

Τι κάνει
Το flag --tlsv1.2 αναγκάζει το curl να χρησιμοποιεί TLS 1.2 ως ελάχιστη αποδεκτή έκδοση για τη χειραψία SSL/TLS. Παλαιότερα πρωτόκολλα (TLS 1.0, 1.1, SSLv3) απορρίπτονται.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε για να επιβάλετε ένα ελάχιστο πρότυπο ασφαλείας. Το TLS 1.2 απαιτείται για συμμόρφωση PCI-DSS και υποστηρίζεται από όλους τους σύγχρονους servers. Τα περισσότερα σύγχρονα builds του curl χρησιμοποιούν ήδη TLS 1.2+ εξ ορισμού, αλλά αυτό το flag το κάνει ρητό.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Επιβολή ελάχιστου TLS 1.3

Τι κάνει
Το flag --tlsv1.3 αναγκάζει το curl να χρησιμοποιεί TLS 1.3 — την ταχύτερη και πιο ασφαλή έκδοση TLS. Το TLS 1.3 εξαλείφει το επιπλέον round-trip στη χειραψία (υποστήριξη 0-RTT) και αφαιρεί όλα τα ξεπερασμένα cipher suites.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε όταν γνωρίζετε ότι ο server υποστηρίζει TLS 1.3 και θέλετε την καλύτερη απόδοση και ασφάλεια. Σημείωση: το TLS 1.3 απαιτεί OpenSSL 1.1.1+ ή συμβατή βιβλιοθήκη TLS. Δεν το υποστηρίζουν ακόμα όλοι οι servers.
$ curl --tlsv1.3 https://modern-api.example.com/data

Πρόσθετες επιλογές SSL/TLS

--ssl-reqd

Απαίτηση SSL/TLS για τη σύνδεση (σφάλμα αν δεν είναι διαθέσιμο)

--ciphers

Καθορισμός ποιων SSL ciphers θα χρησιμοποιηθούν για τη σύνδεση

--cert-type

Καθορισμός τύπου πιστοποιητικού πελάτη (PEM, DER, ENG, P12)

--pinnedpubkey

Pinning και επαλήθευση δημόσιου κλειδιού server (στυλ HPKP)

curl -x: Χρήση HTTP/HTTPS proxy

Τι κάνει
Το flag -x--proxy) δρομολογεί όλη την κίνηση του curl μέσω του καθορισμένου proxy server. Η μορφή είναι [protocol://]host[:port]. Υποστηριζόμενα πρωτόκολλα proxy: HTTP, HTTPS, SOCKS4, SOCKS5.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε για εταιρικά proxies, debugging με εργαλεία όπως Fiddler, Charles ή mitmproxy, δοκιμή γεωγραφικών περιορισμών ή όταν δεν υπάρχει άμεση πρόσβαση στο internet. Μπορείτε επίσης να ορίσετε τις μεταβλητές περιβάλλοντος http_proxy / https_proxy.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Χρήση SOCKS5 proxy

Τι κάνει
Το flag --socks5 λέει στο curl να χρησιμοποιήσει SOCKS5 proxy για τη σύνδεση TCP. Σε αντίθεση με τα HTTP proxies, το SOCKS5 λειτουργεί σε επίπεδο TCP και μπορεί να χειριστεί οποιοδήποτε πρωτόκολλο — όχι μόνο HTTP. Η ανάλυση DNS γίνεται τοπικά εξ ορισμού· χρησιμοποιήστε --socks5-hostname για ανάλυση DNS μέσω του proxy.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε για SSH tunnels (ssh -D), πρόσβαση στο δίκτυο Tor ή όταν ο proxy χρειάζεται να χειριστεί πρωτόκολλα εκτός HTTP. Το SOCKS5 υποστηρίζει UDP και μπορεί προαιρετικά να χειριστεί DNS — καθιστώντας το πιο ευέλικτο από τα HTTP proxies.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Αυθεντικοποίηση proxy

Τι κάνει
Το flag --proxy-user-U) στέλνει διαπιστευτήρια αυθεντικοποίησης στον proxy server. Η μορφή είναι user:password. Αυτό είναι ξεχωριστό από την αυθεντικοποίηση server (-u).
Πότε να χρησιμοποιηθεί
Απαιτείται όταν ο proxy server απαιτεί αυθεντικοποίηση — συνηθισμένο σε εταιρικά και enterprise δικτυακά περιβάλλοντα. Τα διαπιστευτήρια στέλνονται στο proxy, όχι στον server προορισμού.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Παράκαμψη proxy για συγκεκριμένους hosts

Τι κάνει
Το flag --noproxy καθορίζει μια λίστα hosts, domains ή διευθύνσεων IP χωρισμένων με κόμμα που πρέπει να παρακάμψουν τον proxy και να συνδεθούν απευθείας. Υποστηρίζει wildcards: *.example.com ταιριάζει σε όλα τα subdomains.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε για να εξαιρέσετε localhost, εσωτερικές υπηρεσίες ή συγκεκριμένα domains από τον proxy. Αυτό είναι σημαντικό όταν ένα proxy έχει οριστεί καθολικά μέσω μεταβλητών περιβάλλοντος αλλά ορισμένοι hosts (όπως τοπικές υπηρεσίες) χρειάζονται άμεση πρόσβαση. Χρησιμοποιήστε * για παράκαμψη proxy για όλους τους hosts.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Πρόσθετες επιλογές proxy

--socks5-hostname

SOCKS5 proxy με ανάλυση DNS μέσω του proxy

--proxy-cacert

Πιστοποιητικό CA για επαλήθευση του ίδιου του HTTPS proxy

curl --resolve: Προσαρμοσμένη ανάλυση DNS

Τι κάνει
Το flag --resolve παρέχει μια προσαρμοσμένη διεύθυνση IP για ένα συγκεκριμένο ζεύγος host:port, παρακάμπτοντας πλήρως τα DNS lookups. Η μορφή είναι host:port:address. Πολλαπλές εγγραφές --resolve μπορούν να καθοριστούν.
Πότε να χρησιμοποιηθεί
Ουσιαστικό για δοκιμή πριν τη διάδοση DNS, επαλήθευση ενός συγκεκριμένου backend πίσω από load balancer ή τοπική ανάπτυξη όπου χρειάζεστε πραγματικό hostname για επικύρωση SSL πιστοποιητικού. Σε αντίθεση με τη μετατροπή του /etc/hosts, αυτό ισχύει ανά αίτημα και είναι port-specific.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Ανακατεύθυνση σύνδεσης σε άλλο host

Τι κάνει
Το flag --connect-to ανακατευθύνει τη σύνδεση TCP σε διαφορετικό ζεύγος host:port διατηρώντας την αρχική URL για το HTTP αίτημα (συμπεριλαμβανομένου του header Host και SNI). Μορφή: HOST1:PORT1:HOST2:PORT2.
Πότε να χρησιμοποιηθεί
Χρησιμοποιήστε για δοκιμή ενός συγκεκριμένου backend server πίσω από 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

Δέσμευση σύνδεσης σε συγκεκριμένο δικτυακό interface

--dns-servers

Χρήση προσαρμοσμένων DNS servers αντί για προεπιλογή συστήματος (c-ares)

Σενάρια SSL & Proxy πραγματικών συνθηκών

Αυτά τα παραδείγματα συνδυάζουν πολλαπλά flags για τη διαχείριση συνήθων εργασιών ασφάλειας και δικτύου σε ανάπτυξη, CI/CD και περιβάλλοντα production.

Δοκιμή 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

Mutual TLS (αυθεντικοποίηση πιστοποιητικού πελάτη)

Ορισμένα APIs απαιτούν τόσο ο server όσο και ο πελάτης να παρουσιάσουν πιστοποιητικά. Καθορίστε --cert, --key και --cacert για να δημιουργήσετε μια πλήρως επαληθευμένη αμφίδρομη σύνδεση TLS.

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

Εταιρικό proxy με αυθεντικοποίηση

Σε εταιρικά δίκτυα με υποχρεωτικούς proxy servers, συνδυάστε -x με -U για διαπιστευτήρια proxy. Προσθέστε --noproxy για να εξαιρέσετε εσωτερικές υπηρεσίες από τον proxy.

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

Docker container με εσωτερική CA

Όταν υπηρεσίες σε Docker χρησιμοποιούν πιστοποιητικά από εσωτερική CA, κάντε mount το πιστοποιητικό CA στο container και αναφερθείτε σε αυτό με --cacert. Αυτό είναι πιο ασφαλές από -k γιατί εξακολουθεί να επικυρώνει την αλυσίδα πιστοποιητικών.

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

SOCKS5 proxy μέσω SSH tunnel

Δημιουργήστε ένα SOCKS5 proxy με ssh -D και δρομολογήστε κίνηση curl μέσω αυτού με --socks5. Αυτό είναι χρήσιμο για πρόσβαση σε εσωτερικές υπηρεσίες μέσω bastion host.

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

Συχνές ερωτήσεις σχετικά με curl SSL & Proxy

Πώς παρακάμπτω την επαλήθευση SSL πιστοποιητικού στο curl;

Χρησιμοποιήστε curl -k URL ή curl --insecure URL. Αυτό απενεργοποιεί όλους τους ελέγχους πιστοποιητικών — λήξη, αναντιστοιχία hostname, μη αξιόπιστη CA. Χρησιμοποιήστε μόνο για τοπική ανάπτυξη. Για production, χρησιμοποιήστε --cacert με το πραγματικό πιστοποιητικό CA.

Πώς κάνω το curl να εμπιστευτεί ένα self-signed πιστοποιητικό;

Χρησιμοποιήστε curl --cacert /path/to/ca.pem URL για να καθορίσετε το πιστοποιητικό CA που υπέγραψε το self-signed cert σας. Αυτό είναι πιο ασφαλές από -k γιατί εξακολουθεί να επικυρώνει την αλυσίδα πιστοποιητικών — και εμπιστεύεται μόνο τη συγκεκριμένη CA σας.

Πώς ελέγχω ποια έκδοση TLS χρησιμοποιεί το curl;

Εκτελέστε curl -v URL και αναζητήστε τη γραμμή * SSL connection using TLSv1.x / CipherSuite στη λεπτομερή έξοδο. Για να επιβάλετε μια συγκεκριμένη έκδοση, χρησιμοποιήστε --tlsv1.2 ή --tlsv1.3.

Τι είναι το mutual TLS (mTLS) και πώς το χρησιμοποιώ με curl;

Το mutual TLS απαιτεί τόσο ο server όσο και ο πελάτης να παρουσιάσουν πιστοποιητικά. Χρήση: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Το ζεύγος --cert/--key αυθεντικοποιεί τον πελάτη· --cacert επαληθεύει τον server.

Πώς χρησιμοποιώ curl μέσω HTTP proxy;

Χρησιμοποιήστε curl -x http://proxy:port URL. Για HTTPS proxy: curl -x https://proxy:port URL. Εναλλακτικά, ορίστε τις μεταβλητές περιβάλλοντος http_proxy και https_proxy — το curl τις αναγνωρίζει αυτόματα.

Πώς χρησιμοποιώ curl με SOCKS5 proxy;

Χρησιμοποιήστε curl --socks5 host:port URL για τοπική ανάλυση DNS ή curl --socks5-hostname host:port URL για ανάλυση DNS μέσω proxy (σημαντικό για ιδιωτικότητα/Tor). Παράδειγμα με SSH tunnel: ssh -D 1080 user@bastion, μετά curl --socks5 localhost:1080 URL.

Πώς κάνω αυθεντικοποίηση σε proxy server στο curl;

Χρησιμοποιήστε curl -x http://proxy:port -U user:password URL. Το flag -U--proxy-user) στέλνει διαπιστευτήρια στον proxy. Αυτό είναι ξεχωριστό από -u που αυθεντικοποιεί στον server προορισμού.

Πώς εξαιρώ συγκεκριμένους hosts από τον proxy στο curl;

Χρησιμοποιήστε --noproxy "localhost,127.0.0.1,*.internal.com" ή ορίστε τη μεταβλητή περιβάλλοντος NO_PROXY. Υποστηρίζει wildcards (*.example.com). Χρησιμοποιήστε --noproxy "*" για πλήρη παράκαμψη proxy για ένα μεμονωμένο αίτημα.

Πώς δοκιμάζω 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 για συγκεκριμένο host στο 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;

Το πιστοποιητικό του server έχει λήξει. Λύσεις: (1) Ανανέωση πιστοποιητικού στον server, (2) Ενημέρωση CA bundle: curl --cacert /path/to/updated-ca.pem URL, (3) Μόνο για δοκιμή: curl -k URL. Έλεγχος λήξης: curl -v URL 2>&1 | grep expire.

Είναι ασφαλές να χρησιμοποιώ curl --insecure (-k) σε production;

Όχι. Το flag -k απενεργοποιεί κάθε επικύρωση πιστοποιητικού — λήξη, hostname και αλυσίδα εμπιστοσύνης. Αυτό καθιστά τη σύνδεσή σας ευάλωτη σε επιθέσεις man-in-the-middle. Χρησιμοποιείτε πάντα --cacert με το συγκεκριμένο πιστοποιητικό CA σε production και CI/CD pipelines.