מדריך הגדרת SSL, TLS ופרוקסי ב-curl

הגדרת תעודות HTTPS, גרסאות TLS, פרוקסי ופתרון DNS מותאם אישית ב-curl חיונית לתקשורת API מאובטחת, צינורות CI/CD ואיתור באגים ברשת. מדריך זה מכסה כל דגלי SSL, TLS, פרוקסי ורשת — מביטול בדיקות תעודה עם -k לפיתוח מקומי ועד הגדרת TLS הדדי עם --cert וניתוב תעבורה דרך פרוקסי SOCKS5. כל אפשרות כוללת הסבר ברור, שיקולי אבטחה ודוגמה מוכנה להעתקה.

מדריך מהיר לדגלי SSL ופרוקסי

-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)

-xפרוקסי

ניתוב כל התעבורה דרך שרת הפרוקסי המצוין

--socks5פרוקסי

ניתוב החיבור דרך פרוקסי SOCKS5

--proxy-userפרוקסי

ספקו שם_משתמש:סיסמה לשרת הפרוקסי

--noproxyפרוקסי

רשימת מארחים שלא צריכים לעבור דרך הפרוקסי

--socks5-hostnameפרוקסי

פרוקסי SOCKS5 עם פתרון DNS דרך הפרוקסי

--proxy-cacertפרוקסי

תעודת CA לאימות פרוקסי HTTPS עצמו

--resolveרשת

מיפוי זוג host:port ספציפי לכתובת IP מותאמת

התחברות ל-host:port שונה ממה שה-URL מציין

--local-portרשת

הגדרת מספר או טווח פורט מקומי לחיבור

--interfaceרשת

קשירת החיבור לממשק רשת ספציפי

--dns-serversרשת

שימוש בשרתי DNS מותאמים אישית במקום ברירות המחדל של המערכת (c-ares)

curl -k: התעלמות משגיאות תעודת SSL

מה זה עושה
הדגל -k (או --insecure) משבית את כל אימות תעודות SSL/TLS. curl לא יבדוק אם תעודת השרת חתומה על ידי CA מהימן, אם שם המארח תואם, או אם התעודה פגה.
מתי להשתמש
השתמשו רק לפיתוח מקומי עם תעודות בחתימה עצמית או סביבות בדיקה. ל-staging/production, השתמשו ב---cacert עם תעודת CA בפועל — זה גם בטוח יותר וגם מפורש יותר.
$ curl -k https://localhost:8443/api/health

לעולם אל תשתמשו ב--k בסקריפטי production או צינורות 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 וארכיטקטורות zero-trust. שלבו תמיד עם --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 מבטל את המסע הנוסף בלחיצת היד (תמיכה ב-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).
מתי להשתמש
נדרש כאשר שרת הפרוקסי דורש אימות — נפוץ בסביבות רשת ארגוניות. האישורים נשלחים ל-פרוקסי, לא לשרת היעד.
$ 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

אפשרויות פרוקסי נוספות

--socks5-hostname

פרוקסי SOCKS5 עם פתרון DNS דרך הפרוקסי

--proxy-cacert

תעודת CA לאימות פרוקסי HTTPS עצמו

curl --resolve: פתרון DNS מותאם אישית

מה זה עושה
הדגל --resolve מספק כתובת IP מותאמת אישית לזוג host:port ספציפי, תוך עקיפה מוחלטת של חיפוש DNS. הפורמט הוא host:port:address. ניתן לספק מספר ערכי --resolve.
מתי להשתמש
חיוני לבדיקה לפני הפצת DNS, אימות backend ספציפי מאחורי load balancer, או פיתוח מקומי שבו אתם צריכים שם מארח אמיתי לאימות תעודת 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), מה ששימושי כשגם ליעד יש שם מארח.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

אפשרויות רשת נוספות

--local-port

הגדרת מספר או טווח פורט מקומי לחיבור

--interface

קשירת החיבור לממשק רשת ספציפי

--dns-servers

שימוש בשרתי DNS מותאמים אישית במקום ברירות המחדל של המערכת (c-ares)

תרחישי SSL ופרוקסי מהעולם האמיתי

דוגמאות אלה משלבות מספר דגלים לטיפול במשימות אבטחה ורשת נפוצות בסביבות פיתוח, CI/CD ו-production.

בדיקת HTTPS על Localhost

בעת פיתוח מקומי עם תעודה בחתימה עצמית, שלבו --resolve עם --cacert (או -k לבדיקה מהירה). זה מאפשר שימוש בשם מארח אמיתי ל-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.

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

שאלות נפוצות על SSL ופרוקסי ב-curl

כיצד אני מדלג על אימות תעודת SSL ב-curl?

השתמשו ב-curl -k URL או curl --insecure URL. זה משבית את כל בדיקות התעודות — תפוגה, אי-התאמת שם מארח, CA לא מהימן. השתמשו רק לפיתוח מקומי. ל-production, השתמשו ב---cacert עם תעודת CA בפועל.

כיצד אני גורם ל-curl לסמוך על תעודה בחתימה עצמית?

השתמשו ב-curl --cacert /path/to/ca.pem URL לציון תעודת CA שחתמה על התעודה בחתימה עצמית. זה בטוח יותר מ--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 מאפשרת התאמה נכונה של שם מארח התעודה.

כיצד אני דורס פתרון 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) ב-production?

לא. הדגל -k משבית את כל אימות התעודות — תפוגה, שם מארח ושרשרת אמון. זה הופך את החיבור שלכם לפגיע להתקפות man-in-the-middle. השתמשו תמיד ב---cacert עם תעודת CA ספציפית ב-production וצינורות CI/CD.