מדריך הגדרת SSL, TLS ופרוקסי ב-curl
הגדרת תעודות HTTPS, גרסאות TLS, פרוקסי ופתרון DNS מותאם אישית ב-curl חיונית לתקשורת API מאובטחת, צינורות CI/CD ואיתור באגים ברשת. מדריך זה מכסה כל דגלי SSL, TLS, פרוקסי ורשת — מביטול בדיקות תעודה עם -k לפיתוח מקומי ועד הגדרת TLS הדדי עם --cert וניתוב תעבורה דרך פרוקסי SOCKS5. כל אפשרות כוללת הסבר ברור, שיקולי אבטחה ודוגמה מוכנה להעתקה.
מדריך מהיר לדגלי SSL ופרוקסי
אפשרו חיבורים לא מאובטחים — דלגו על כל אימות 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 מהימן, אם שם המארח תואם, או אם התעודה פגה. - מתי להשתמש
- השתמשו רק לפיתוח מקומי עם תעודות בחתימה עצמית או סביבות בדיקה. ל-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/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 להשתמש ב-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/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). - מתי להשתמש
- נדרש כאשר שרת הפרוקסי דורש אימות — נפוץ בסביבות רשת ארגוניות. האישורים נשלחים ל-פרוקסי, לא לשרת היעד.
$ 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אפשרויות פרוקסי נוספות
פרוקסי SOCKS5 עם פתרון DNS דרך הפרוקסי
תעודת 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/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), מה ששימושי כשגם ליעד יש שם מארח.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthאפשרויות רשת נוספות
הגדרת מספר או טווח פורט מקומי לחיבור
קשירת החיבור לממשק רשת ספציפי
שימוש בשרתי 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/statusTLS הדדי (אימות תעודת לקוח)
חלק מה-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.