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 (Certificate Authority) बंडल फ़ाइल के विरुद्ध सर्वर का 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 डिवाइस संचार और zero-trust आर्किटेक्चर में सामान्य। जब तक कुंजी सर्टिफ़िकेट फ़ाइल में एम्बेड न हो, हमेशा
--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/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 को 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फ़्लैग TCP कनेक्शन को भिन्नhost:portजोड़ी पर रीडायरेक्ट करता है जबकि HTTP अनुरोध के लिए मूल URL (Hostहेडर और SNI सहित) बनाए रखता है। फ़ॉर्मेट: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 फ़्लैग सभी सर्टिफ़िकेट सत्यापन अक्षम करता है — समाप्ति, होस्टनाम और ट्रस्ट चेन। यह आपके कनेक्शन को man-in-the-middle हमलों के लिए कमज़ोर बनाता है। production और CI/CD पाइपलाइन में हमेशा विशिष्ट CA सर्टिफ़िकेट के साथ --cacert का उपयोग करें।