התחברות לפרוקסי URL ב-Emacs 31.1: auth-source ומגבלות CONNECT
הגדירו פרוקסי HTTP מאומת עבור ספריית ה-URL של Emacs, הבינו את חיפוש פרטי ה-Basic שלה, והביאו בחשבון את נתיב HTTPS CONNECT ב-Emacs 31.1.
הכתובת של הפרוקסי אומרת ל-Emacs לאן להתחבר. ההתחברות היא חלק אחר של השיחה. עבור בקשת HTTP רגילה, ספריית ה-URL של Emacs יכולה להשיב לאתגר אימות של הפרוקסי, להשיג פרטי גישה מ-auth-source או לשאול באופן אינטראקטיבי, ולעשות שימוש חוזר בפרטים המוחזקים בסשן.
הפרטים שלהלן מתאימים ל-Emacs 31.1. הם נוגעים לפעולות המשתמשות בספריית ה-URL; להורדה חיצונית שמופעלת על ידי חבילת Emacs יש נתיב אימות משלה.
קבעו את הנתיב, ואז תנו ל-HTTP לבקש את ההתחברות
אפשר לבחור נקודת קצה קבועה של פרוקסי באמצעות האפשרות המתועדת:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
החליפו את מציין המקום בנקודת הקצה שסופקה. המפתחות מתארים את סכימות ה-URL של היעד. הוספת רשומת HTTPS בוחרת נתיב ליעדי HTTPS; היא כשלעצמה אינה מספקת פרטי גישה.
במהלך בקשת HTTP רגילה, פרוקסי יכול להשיב עם 407 Proxy Authentication Required ואתגר Proxy-Authenticate. ספריית ה-URL בוחרת סכימת אימות נתמכת ומשיגה פרטי גישה עבור נקודת הקצה של הפרוקסי. לאחר מכן היא מנסה שוב עם Proxy-Authorization.
באימות Basic, בקשה אינטראקטיבית יכולה לבקש שם משתמש וסיסמה כאשר אין פרטי גישה מתאימים. בקשה המסומנת כלא-אינטראקטיבית אינה יכולה להסתמך על בקשות אלה. ההתחברות לפרוקסי נפרדת גם מההתחברות לאתר היעד: אתגר 401 של אתר הולך בנתיב שונה.
שימו פרטי גישה קבועים ב-auth-source
אם auth-source כבר קורא קובץ פרטי גישה מוצפן כמו ~/.authinfo.gpg, לרשומת Basic עבור דוגמה זו יש הצורה הבאה:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
השתמשו בחשבון ובסוד האמיתיים שלכם, וודאו שהקובץ נמצא בין ה-auth-sources שהוגדרו. השורה ממחישה שדות תואמים; היא אינה הוראה לשים סיסמה בקובץ האתחול של Lisp.
שני פרטים חשובים במימוש ה-Basic של Emacs 31.1. הוא מחפש את שם המארח של הפרוקסי בלי פורט ה-TCP המספרי, והוא מעביר את סכימת ה-URL של הפרוקסי כערך הפורט של auth-source. עבור פרוקסי HTTP זה, הערך הוא http, אף שחיבור ה-TCP משתמש בפורט 8080.
חיפוש זה אינו כולל את ה-realm של האתגר או את פורט הפרוקסי המספרי. אל תצפו שהוא יבחר סיסמאות Basic שונות עבור כמה realms או פורטים של פרוקסי באותו שם מארח. Digest משתמש בחיפוש מארח אחר, ולכן הדוגמה שלעיל מיועדת במיוחד ל-Basic.
ספריית ה-URL גם מחזיקה מטמון אימות משלה. רשומות ה-Basic שלה מבחינות בין נקודות קצה של פרוקסי ומשתמשות בהתאמת realm או תיקייה בתוך נקודת קצה; המטמון הזה נפרד מחיפוש ה-auth-source. הקלדת סיסמה בשאלה יכולה למלא את מטמון הסשן בלי לשמור רשומה חדשה בקובץ פרטי הגישה הקבועים שלכם.
ל-HTTPS יש שלב אימות מוקדם יותר
עבור יעד HTTPS דרך פרוקסי HTTP, Emacs שולח תחילה CONNECT. לכן ייתכן שיידרש אימות לפני שהוא מגיע לחיבור המוצפן לאתר.
ב-Emacs 31.1, בונה בקשת ה-CONNECT בודק אימות שכבר זמין דרך מנגנון האימות שלו, כולל פרטי Basic שבמטמון. נתיב ה-Basic שלו אינו מבקש ואינו מביא רשומת auth-source חדשה באותה נקודה. תגובת CONNECT שאינה 200 גם אינה נכנסת למטפל אתגר ה-HTTP 407 הרגיל שתואר לעיל.
לכן, רשומת auth-source שיכולה להשיב לאתגר HTTP Basic רגיל אינה מבטיחה שבקשת ה-HTTPS הראשונה של סשן חדש תאומת בהצלחה. לסשן עם פרטי גישה מתאימים במטמון יש מצב התחלה אחר. עריכה חוזרת של אותה רשומת סיסמה אינה יכולה בעצמה להסיר את ההבדל הזה בין שני הנתיבים.
אם פעולת HTTPS נעצרת בפרוקסי, קבעו אם CONNECT קיבל 407 ואם אתם משתמשים בהתנהגות של גרסה זו. אשרו גם את סכימת האימות שהפרוקסי מציע. רשומת פרטי Basic אינה מתאם אוניברסלי לכל מערכת אימות ארגונית.
שמרו את התצורה המתמשכת באפשרות הפרוקסי הציבורית ובמערכת פרטי הגישה שבחרתם. האחסון הפנימי של Basic בספריית ה-URL שימושי להבנת ההתנהגות הזו, אך מילוי ידני של מבנה הנתונים הפרטי הזה יקשור את ההגדרה לפרטי מימוש.