curl SSL, TLS اور Proxy کنفیگریشن گائیڈ
curl میں HTTPS سرٹیفکیٹس، TLS ورژنز، پراکسیز اور حسب ضرورت DNS ریزولوشن کنفیگر کرنا محفوظ API کمیونیکیشن، CI/CD پائپ لائنز اور نیٹ ورک مسائل کی ڈیبگنگ کے لیے ضروری ہے۔ یہ گائیڈ ہر SSL، TLS، proxy اور نیٹ ورک فلیگ کا احاطہ کرتی ہے — مقامی ڈویلپمنٹ کے لیے -k سے سرٹیفکیٹ چیکس غیر فعال کرنے سے لے کر --cert سے باہمی TLS سیٹ اپ اور SOCKS5 پراکسیز کے ذریعے ٹریفک روٹ کرنے تک۔ ہر آپشن میں واضح وضاحت، سیکیورٹی تحفظات اور کاپی کرنے کے لیے تیار مثال شامل ہے۔
SSL اور Proxy فلیگز فوری حوالہ
غیر محفوظ کنکشنز کی اجازت دیں — تمام 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/healthپروڈکشن اسکرپٹس یا CI/CD پائپ لائنز میں کبھی -k استعمال نہ کریں۔ یہ تمام سرٹیفکیٹ ویلیڈیشن غیر فعال کرتا ہے اور آپ کے کنکشن کو مین ان دی مڈل حملوں کے لیے خطرے سے دوچار کرتا ہے۔ مخصوص 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 فارمیٹ میں ہونی چاہیے۔- کب استعمال کریں
- جب سرور کلائنٹ سرٹیفکیٹ تصدیق کا مطالبہ کرے تو ضروری ہے — بینکنگ APIs، حکومتی خدمات، 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/dataاضافی SSL/TLS آپشنز
کنکشن کے لیے SSL/TLS لازمی کریں (دستیاب نہ ہونے پر ناکام ہوں)
کنکشن کے لیے کون سے SSL سائفرز استعمال ہونگے مخصوص کریں
کلائنٹ سرٹیفکیٹ کی قسم مخصوص کریں (PEM, DER, ENG, P12)
سرور کی پبلک کلید پن اور تصدیق کریں (HPKP طرز)
curl -x: HTTP/HTTPS Proxy استعمال کریں
- یہ کیا کرتا ہے
-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 Proxy استعمال کریں
- یہ کیا کرتا ہے
--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اضافی Proxy آپشنز
پراکسی سے DNS ریزولوشن والا SOCKS5 پراکسی
HTTPS پراکسی خود کی تصدیق کے لیے CA سرٹیفکیٹ
curl --resolve: حسب ضرورت DNS ریزولوشن
- یہ کیا کرتا ہے
--resolveفلیگ مخصوصhost:portجوڑی کے لیے DNS لک اپ کو مکمل طور پر بائی پاس کر کے حسب ضرورت IP ایڈریس فراہم کرتا ہے۔ فارمیٹ: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 درخواست کے لیے اصل URL (بشمولHostہیڈر اور SNI) برقرار رکھتے ہوئے 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 اور Proxy سنیریوز
یہ مثالیں ڈویلپمنٹ، CI/CD اور پروڈکشن ماحول میں عام سیکیورٹی اور نیٹ ورکنگ ٹاسکس ہینڈل کرنے کے لیے متعدد فلیگز ملاتی ہیں۔
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 (کلائنٹ سرٹیفکیٹ تصدیق)
کچھ APIs سرور اور کلائنٹ دونوں سے سرٹیفکیٹ پیش کرنے کا مطالبہ کرتے ہیں۔ مکمل تصدیق شدہ دو طرفہ 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 Container
جب Docker میں سروسز اندرونی CA کے سرٹیفکیٹ استعمال کریں تو CA سرٹیفکیٹ container میں ماؤنٹ کریں اور --cacert سے حوالہ دیں۔ یہ -k سے زیادہ محفوظ ہے کیونکہ یہ پھر بھی سرٹیفکیٹ چین تصدیق کرتا ہے۔
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthSSH ٹنل کے ذریعے SOCKS5 Proxy
ssh -D سے SOCKS5 پراکسی بنائیں اور --socks5 استعمال کر کے curl ٹریفک اس سے گزاریں۔ یہ bastion host کے ذریعے اندرونی سروسز تک رسائی کے لیے مفید ہے۔
$ curl --socks5 localhost:1080 https://internal-api.example.com/statuscurl SSL اور Proxy کے بارے میں اکثر پوچھے جانے والے سوالات
curl میں SSL سرٹیفکیٹ تصدیق کیسے چھوڑیں؟
curl -k URL یا curl --insecure URL استعمال کریں۔ یہ تمام سرٹیفکیٹ چیکس غیر فعال کرتا ہے — میعاد ختم، ہوسٹ نام عدم مماثلت، غیر معتبر CA۔ صرف مقامی ڈویلپمنٹ کے لیے استعمال کریں۔ پروڈکشن کے لیے اصل 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۔
کیا پروڈکشن میں curl --insecure (-k) استعمال کرنا محفوظ ہے؟
نہیں۔ -k فلیگ تمام سرٹیفکیٹ ویلیڈیشن غیر فعال کرتا ہے — میعاد ختم، ہوسٹ نام اور ٹرسٹ چین۔ یہ آپ کے کنکشن کو مین ان دی مڈل حملوں کے لیے خطرے سے دوچار کرتا ہے۔ پروڈکشن اور CI/CD پائپ لائنز میں ہمیشہ مخصوص CA سرٹیفکیٹ کے ساتھ --cacert استعمال کریں۔