לחיצה על WinRM דרך SSL להגדיר PSRemoting [שלב אחר שלב]

אם אתה כבר מפעיל פקודות רחוקות עם PowerShell Remoting (PSRemoting), אתה יודע כמה נוחה התכונה. אתה יכול להתחבר למחשבים רחוקים יותר מאחד ולנהל אותם כאילו הם היו מקומיים. PSRemoting תלוי ב-Windows Remote Management (WinRM) כדי לאפשר את זה, ואם אתה לא משתמש ב-WinRM דרך SSL, ייתכן שאתה פותח את עצמך לבעיות אבטחה.

במדריך הזה הפעלת למדע כיצד להגדיר את Windows בלקוח ובשרת כך שישמשו את WinRM דרך HTTPS (SSL) וכיצד להשתמש בתעודות לאימות בעת שימוש ב-WinRM דרך HTTPS.

דרישות מוקדמות

אם תרצה לעקוב אחרי המדריך, וודא שיש לך את הדברים הבאים:

  • A Windows 7+ or Server 2008 R2 machine to serve as the client machine. This tutorial will use Windows 10.
  • A Windows 7+ or Server 2008 R2+ machine to serve as the server machine. This tutorial will use Windows Server 2019.
  • גישה לחשבון מנהל מקומי או חשבון עם הרשאות מנהל מקומי על שני המחשבים – הלקוח והשרת.
  • שירות ניהול תעודות אקטיביות (ADCS) עם תשתיות מפתח ציבורות (PKI) הקמו. זה יעזור אם תממש ADCS ליישומים פרודוקטיביים, אך זה אופציונלי לצורך המדריך והבדיקה. המדריך יניח שה-PKI מוגדר כ-CA ארגונית או עצמאית.

למה להשתמש ב-WinRM דרך SSL?

את פרוטוקול השלטון המרחוק, PSRemoting, משתמשים כבר כאשר משתמשים ב־WinRM ומאפשר לך לנהל מכונות לקוח מרחוק. פעם ש־PSRemoting מקים הפעלה על WinRM, הוא מצפה את כל התקשורת מהלקוח לשרת. גם תהליך ההגדרה ליישום PSRemoting בלי HTTPS די פשוט.

אם PSRemoting מצפה תקשורת הקשורה בכבר סופגנית, למה לעסוק בהגדרת משהו כמו ADCS וניהול תעודות כשכבר מסופקת הצפנה?

כי במהלך האימות, נתוני הזיהוי יכולים להישלח בתסדירים לא מאובטחים, תלוי ב־סוג האימות המשמש.

אחת הדרכים הקלות ביותר להפוך את PSRemoting ליותר מאובטח היא באמצעות השימוש ב־WinRM על HTTPS במקום HTTP. HTTPS מכסה את כל זרמי החיבור שלך, כולל אימות בתוך שכבת ההצפנה ש־WinRM משתמשת בה כבר. HTTPS גם מספק באופן סימולטני דרך לאמת שהשרת אליו אתה מתחבר הוא באמת מה שחושבים שהוא.

הגדרת WinRM עם תעודת אימות באופן עצמאי

ובוא נתקדם כעת להדגמות. למעשה, בתרומה הראשונה, תלמד כיצד להגדיר את הצפנת התקשורת של PSRemoting עם WinRm על SSL דרך תעודת אימות באופן עצמאי.

שימוש בתעודה בעצמך הוא דרך נהדרת להגדיר סביבת בדיקה מבלי לדאוג ל-PKI כמו ADCS. כאשר אתה משתמש בתעודה בעצמך, אתה יוצר תעודה שהשרת חותם בעצמו שבגדול מאשר על עצמו.

תעודות קיימות כדי לבצע שתי משימות בדרך כלל; אימות חיבור והצפנתו. שימוש בתעודה בעצמך מיישם רק את האחרון. כדי לוודא את זהות השרת, עליך תמיד להשתמש בתעודות שסופקו על ידי ה-PKI. תעודות שסופקו על ידי ה-PKI מספקות מקור יחיד של אמון לעומת צורך לסמוך על כל תעודה בעצמך באופן ידני.

הגדרת WinRM מעל SSL עם תעודה בעצמך מחייבת ארבע שלבים ברמה גבוהה:

  1. יצירת התעודה בעצמך על מכונת היעד.
  2. הגדרת ה-שרת ה- WinRM (המאזין) של האינטרנט כדי להשתמש בתעודה בעצמך לאימות.
  3. פתיחת הפורטים המתאימים בקיר האש של מכונת היעד של Windows.
  4. ביצוע פקודה כדי להתחיל חיבור מרחוק בלקוח באמצעות cmdlet של PowerShell כמו Enter-PSSession.

בואו נעבור כעת על כל אחד מהשלבים.

יצירת תעודה בעצמך

השלב הראשון הוא יצירת תעודה בעצמך על השרת. בעת התחברות, PSRemoting תשתמש בתעודה זו כדי להצפין את כל התקשורת.

בזמן שאתה נמצא על ServerB עם חלון PowerShell שפתוח כמנהל, הרץ את הפקודה New-SelfSignedCertificate כפי שמוצג למטה. ביצוע הפקודה מטה יגרום ליצירת תעודה עבור ServerB.domain.com ב אחסון התעודות האישי של המכשיר המקומי.

New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
Creating self-signed certificate.

הפרמטר Subject אמור להיות שם התחום המושלם של השרת. WinRM משתמש בנושא כדי לאמת את זהות השרת.

אפילו אם השרת נמצא בקבוצת עבודה, תמיד ספק שם תחום, לדוג', domain.com או lab.local. כאשר אתה מתחבר למכשיר היעד, שם ה-DNS שאליו אתה מתחבר חייב להתאים בדיוק לשם זה, אחרת החיבור ייכשל.

ה-TextExtension מאפשר לך להגדיר את שימוש המפתח (2.5.29.37) של התעודה, שמגדיר מה ניתן לעשות עם התעודה. הגדר שימוש במפתח עבור אימות השרת ({text}1.3.6.1.5.5.7.3.1) כדי לוודא שהתעודה יכולה לשמש רק לאימות זהותו של השרת.

לאחר שהפקודה New-SelfSignedCertificates מופעלת, היא תחזיר את טמפלייט התעודה שנוצרה. שמור על זה, כי תזדקק לו לפקודה הבאה.

הגדרת מאזין WinRM

כאשר יש לך את התעוזה החתומה עצמית על השרת, יש להגדיר את נגן WinRm להתחיל להשתמש בתעוזה זו לאמת. לכך, יש להשתמש בפקודה winrm create כפי שמוצג למטה.

הפרמטר Address=* בפקודה מסביר לנגן להאזין לכל כתובת IP שמוגדרת על השרת. אם יש לשרת מספר כתובות IP מוגדרות, ניתן להגדיר כתובת IP ספציפית כאן.

יש לוודא להחליף את התווית <cert thumbprint here> בסימול האצבע שחזר בשלב האחרון.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
Creating WinRM listener with self-signed certificate.

פתיחת יציאת הגזר SSL של WinRM

לאחר מכן, אם אתה משתמש בקיר האש של Windows, יש להרשות תעבורת HTTPS שנכנסת לשרת דרך יציאת HTTPS ברירת המחדל 5986.

פתיחת יציאת הקיר ל-WinRM דרך HTTPS באמצעות PowerShell באמצעות הפקודה הבאה.

$FirewallParam = @{
    DisplayName = 'Windows Remote Management (HTTPS-In)'
    Direction = 'Inbound'
    LocalPort = 5986
    Protocol = 'TCP'
    Action = 'Allow'
    Program = 'System'
}
New-NetFirewallRule @FirewallParam

התחברות לשרת דרך SSL

כעת, יש להגדיר את שרת ה- Windows המרוחק לקבל חיבורי WinRM דרך SSL. בזמן זה, יש לחזור ללקוח ולהתחיל פקודות PSRemoting שברצונך לבדוק. לדוגמה, ניתן לנסות את הפקודות Enter-PSSession או Invoke-Command cmdlet. אך עכשיו, התחברות תתבצע בצורה מעט שונה מהחיבור הרגיל ב-HTTP.

התחברות דרך HTTPS דורשת כמעט תמיד פרמטר יחיד UseSSL. הפרמטר הזה מספר לפקודה לחפש תקשורת WinRM באמצעות האזנן HTTPS בניגוד לאזנן HTTP כמו שהוא עושה באופן ברירת מחדל. הפרמטר UseSSL זמין במספר פקודות PSRemoting נוספות.

לצורך בדיקה, הריץ את Enter-PSSession וספק את שם הדומיין המלא של השרת כפי שהוגדר בנושא של תעודת האבטחה שנגזרה עצמית, אובייקט PSCredential להגדרת שם משתמש וסיסמה, ולבסוף, פרמטר המתג UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -UseSSL

אם תריץ את הפקודה לעיל, תקבל הודעת שגיאה מאחר והגדרת את אזנן ה-WinRM על השרת להשתמש בתעודת אבטחה שנגזרה עצמית. בכל פעם שלקוח PSRemoting מנסה לאמת את הזיהוי שלו לשרת, הוא ינסה לאמת את התעודה ולא יצליח. תעודה שנגזרת עצמית אין לה שרשרת אמינות שבאמצעותה הפקודה יכולה לבדוק, ולכן הפעולה נכשלת.

Failing certificate authority trust check with self-signed certificate.

להתחבר לשרת עם תעודה עצמית, עליך לדרוס את בדיקת האמון בתעודה. באפשרותך לעשות זאת על ידי יצירת אפשרות PSSessionOption בשם SkipCACheck באמצעות פקודת New-PSSessionOption ולהעביר אותה לפקודה כפי שמוצג למטה.

$PSSessionOption = New-PSSessionOption -SkipCACheck
Enter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL

באפשרותך להגדיר עצמך אובייקטים שונים של PSSessionOption כדי להוסיף אפשרויות עבור החיבור המרוחק שלך שאינן כלולות בפקודת Enter-PSSession ישירות.

נסה להתחבר שוב ובפועל PowerShell צריך כעת לבקש ממך אישור לסיסמאות. לאחר שסיפקת, עליך כעת להתחבר לשרת באמצעות WinRM מעל SSL!

הגדרת WinRM עם תעודה חתומה של CA

אם אתה מתכוון להשתמש ב-PSRemoting באמצעות WinRM בסביבה פרודוקטיבית ורוצה לשמור ככל האפשר על האבטחה, עליך להתמקד ב-WinRM מעל SSL באמצעות תעודה שנחתמת על ידי מכון אישור (CA)..

תעודות שנחתמות על ידי מכון אישור מתחזקות שרשרת אמון והן יותר מאובטחות מתעודות עצמיות פשוטות מאחר והן מאמתות את זהות מוציא התעודה..

אם אתה נמצא בסביבת Active Directory, אחד הדרכים הנפוצות ביותר להגדיר מכון אישור היא עם ADCS. עם ADCS, באפשרותך להפיץ תעודות להתקנים ולהגדיר את WinRM להשתמש באותן תעודות.

המדריך הזה מניח שכבר הגדרת ADCS והופעלת בסביבתך.

להתקנה מהירה ניתן לעקוב אחר תיעוד של מיקרוסופט, אך לפרטיות המרכזית, עליך לחקור הגדרות מאוד, מאחר שרשות תעודות היא במרכז מאמצי ההצפנה של ארגון.

יצירת בקשת התעודה

השלב הראשון בשימוש בתעודה שהונפקה על ידי רשות תעודות הוא יצירת התעודה. כדי ליצור את התעודה, עליך תחילה להנפיק בקשת תעודה באמצעות בקשת החתימה של תעודת תעודה (CSR). לאחר שנוצר, ניתן לשלוח את בקשת ה-CSR הזו לרשות כדי להנפיק את התעודה.

שלבי פעולה של סעיפים אלו יעבדו גם באיחודים ADCS כאשר זהו CA של עסקים או CA עצמאי. אם אתה משתמש ב-AD-integrated enterprise CA, ניתן לקצר את הפעלת התעודות מבלי לעבור דרך שלבי פעולה אלו באמצעות אוטומציה בקבלת תעודות או תבניות תעודה.

בזמן שאתה על השרת (ServerB במדריך זה), צור את הבקשה לתעודה:

  1. הפעל את certlm.msc כדי לפתוח את מנהל התעודות של Windows.

2. לחץ ימני על חניין האישי ובחר כל המשימות —> פעולות מתקדמות —> צור בקשה מותאמת.

3. למדריך זה, השאר את כל השדות כברירת מחדל עד שתגיע לעמוד המידע על התעודה כפי שמוצג למטה. כאשר אתה מגיע לשם, לחץ על התפריט הנפתח של פרטים ובחר מאפיינים.

Creating a custom certificate request.

4. לחץ על לשונית הנושא ושנה את הסוג לשם רגיל.

5. עכשיו הזן את שם הדומיין המשותף של השרת אם הוא מחובר לדומיין או רק את שם המארח אם הוא לא, ולחץ על הוסף.

Specifying subject for certificate request.

שים לב כי לשימוש עם נציג SSL של WinRM, עליך להשתמש בשם הרגיל. האפשרויות האחרות ברשימה יכולות להיות כלולות אך אינן דרושות להתקנה זו.

6. לחץ על לשונית ההרחבה.

7. אם אינך משתמש באימות המבוסס על תעודות שיתופרט בהמשך, הרחב את כותרת שימוש מורחב במפתח והוסף אימות שרת. סוג זה של שימוש במפתח מספר לווינדוס שהתעודה צריכה להשתמש בו לאימות של שרת. אפשרויות אחרות כוללות אימות לקוח, חתימת קוד, והצפנת מסמכים.

8. אם ברצונך להגדיר אימות המבוסס על תעודות, וודא שבחרת ב אימות לקוח, כפי שמוצג למטה.

Requesting a client authentication certificate.

9. לאחר מכן, לחץ על לשונית מפתח פרטי ושים לב ל אפשרויות המפתח. שנה את גודל המפתח ברירת המחדל מ-1024 לפחות 2048 כדי לחזק את אבטחת זוג המפתחות.

קיימים גם ספקי הצפנה חזקים יותר זמינים בווינדוס, אך יתכן שתתמודד עם חוסר תאימות לתוכנה ישנה.

10. סגור את חלון מאפייני התעודה ושמור את ההגדרות על ידי לחיצה על אישור ולחיצה על הבא להמשך עם הוראות.

11. כעת ספק נתיב לפלט את בקשת התעודה בו תוכל לאחזר אותה מאוחר יותר ולחץ על סיום.

כאשר התהליך הושלם, יש לך קובץ בקשת תעודה.

בקשת תעודה

לאחר שיצרת את הבקשה, עכשיו עליך לשלוח את הבקשה הזו לשרת ה-CA שלך, שיצור את התעודה. כדי לעשות זאת:

  1. נווט אל שרת ה-ADCS שלך בכתובת http://<server name FQDN>/certsrv/certrqxt.asp.
Certificate request submission web page.

2. פתח את קובץ בקשת התעודה שנוצר לפני כן עם notepad והעתק את הטקסט מתוך קובץ בקשת התעודה אל תוך תיבת הבקשה. כלום אינו דרוש עבור תכונות נוספות עבור תעודה זו.

3. לחץ על שלח. זה ישלח את הבקשה שלך ל-CA. אז זה צריך להראות לך את מזהה הבקשה, שיהיה נדרש מאוחר יותר. שמור את זה! תצטרך את זה מאוחר יותר.

4. כעת התחבר לשרת CA שהוא חלק מסביבת ה-ADCS שלך באמצעות מנהל התעודות של Windows במחשב המקומי שלך או באמצעות RDP על ידי הפעלת certsrv.msc.

5. לחץ על בקשות בהמתנה.

Winrm over SSL : Issuing certificate from pending request.

6. לחץ על הבקשה בהמתנה עם העכבר הימני, לחץ על כל המשימות, ולחץ על מקבל. זה יאשר את הבקשה שהוגשה לאחרונה בהתבסס על מזהה הבקשה משלב הקודם.

רישום התעודה

עכשיו שהנפקת תעודה ב-CA, הגיע הזמן לרשום את התעודה בשרת שאתה מגדיר עליו את WinRM. כדי לעשות זאת:

  1. מהשרת שבו אתה מגדיר WinRM מעל SSL, נווט אל http://<שם השרת FQDN>/certckpn.asp. אתה צריך לראות בקשת תעודה ממתינה יחידה.
Viewing status of pending certificate request.

ניתן לאחזר את התעודה הציבורית ממכונה אחרת אם נדרש, אך התחלת התהליך מהשרת שאתה מגדיר ל-WinRM מעל HTTPS פשוטה את התהליך.

2. בחר בבקשה שלחת מהרשימה והורד את שרשרת התעודות certificate chain. עליך להוריד את כל שרשרת התעודות אם השרת שאתה מגדיר את WinRM דרך HTTPS משתמש ב-CA שלך כשרת שורש.

Downloading certificate chain.

3. פתח את קובץ שרשרת התעודות. אתה צפה לראות תעודה עבור השרת שלך, וכל תעודת סמכות גבוהה יותר בשרשרת. מתחת ל-win2.lab.int נמצאת התעודה שביקשת, ו-WIN2-CA היא התעודה של ה-CA שהנפיקה את התעודה עבור win2.lab.int.

Showing certificates inside of the certificate chain.

4. פתח כפול על אחת מהתעודות, ובחלון שנפתח, לחץ על הכפתור Install Certificate. מכיוון שהתעודה הזו תשמש על ידי השרת ולא על ידי משתמש ספציפי, שנה את האפשרות ל-Local Machine.

Importing certificate into the local machine certificate store.

5. המשך דרך ההוראות, השאר הכל כברירת מחדל. ברירות המחדל אמורות לשים את התעודה באחסון התעודות של שרתי ה-WinRM.

6. כעת חזור על השלבים 3-5 עבור כל אחת מהתעודות האחרות ברשימה. אם יש לך יותר מתעודה אחת, וודא שכל התעודות האחרות מונחות באחסון התעודות האמצעיות.

צור והגדר את מאזין ה-WinRM דרך HTTPS

עכשיו שכל התעודות מותקנות, הגיע הזמן להגדיר את WinRM על השרת שלך להשתמש בתעודה זו עבור המאזין.

עם PowerShell פתוח בשרת WinRM:

  1. הריץ את הפקודה הבאה כדי להגדיר באופן אוטומטי את הסקור להאזנה של WinRM. הפקודה winrm עושה זאת על ידי חיפוש באחסון התעודות המקומי של המחשב עבור תעודה שמתאימה לדרישות WinRM.
winrm quickconfig -transport:https

2. חומת האש של Windows תחסום את פתח ה-HTTPS של WinRM שבנפותר במספר 5986 כברירת מחדל. כדי לוודא שחומת האש מאפשרת כניסה לפתח נכנס 5986, הרץ את הפקודה הבאה בפוורשל:

$FirewallParam = @{
     DisplayName = 'Windows Remote Management (HTTPS-In)'
     Direction = 'Inbound'
     LocalPort = 5986
     Protocol = 'TCP'
     Action = 'Allow'
     Program = 'System'
 }
 New-NetFirewallRule @FirewallParam

בדיקת החיבור ל- WinRM SSL

בנקודה זו, אתה מוכן להתחבר. באמצעות הפקודות האהובות עליך להשתמש ב- PSRemoting כמו Invoke-Command או Enter-PSSession, התחבר לשרת והשתמש בפרמטר UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)

ודא תמיד שערך הפרמטר ComputerName מתאים בדיוק לשם המשותף המסופק במהלך יצירת התעודה. אם תנסה להתחבר לשם מחשב שונה או אולי לכתובת ה-IP של המארח, תקבל שגיאת התאמת תעודות שתגרום לכישלון בחיבור.

הגדרת אימות על בסיס תעודות

כעת, כבר עליך להגדיר מאזין WinRM להשתמש ב-HTTPS. אם כן, תוכל גם להשתמש בתעודת אימות משתמש כדי לאמת כמשתמש מקומי בשרת המרוחק. שימוש בתעודת משתמש הוא אחד הדרכים הבטוחות ביותר אך זה דורש זמן מה להגדיר. תגלה כי זה גם עבודה חוזרת הרבה כיוון שכל תעודה היא ייחודית למכונת הלקוח הפרטית.

אימות במבוסס תעודות פועל רק עם חשבונות משתמשים מקומיים ולא עם משתמשים בדומיין.

בהנחה שהגעת למדובר בקשת תעודה עבור אימות הלקוח כפי שמתואר בחלק יצירת בקשת התעודה, קרא כאן:

הפעלת אימות תעודה ומיפוי משתמש בשרת

  1. בשרת, הפעל את הפקודה Set-Item כדי לאפשר אימות על פי תעודה.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true

2. לאחר מכן, הרץ את הפקודה Get-ChildItem כדי לראות את ספריית Trusted Root Certification Authorities ולמצוא את הטמבל המשויך לתעודת האימות של הלקוח. לעשות זאת, סנן את התעודות על פי הנושא שמכיל את שמו של ספק התעודות שלך.

Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}

3. הרץ את הפקודה למטה בה הפרמטר SubjectName הוא הנושא של תעודת המשתמש שסיפקת כאשר יצרת את התעודה

הטמבל של ספק התעודות הוא הטמבל שנאסף עם הפקודה הקודמת, ואז שם המשתמש והסיסמה שנדרשים הם שם המשתמש והסיסמה המקומיים שיועשה בהם אימות על פי תעודה.

New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)

בדיקת אימות על פי תעודה

עכשיו שמיפוי התעודה למשתמש הוגדר, השתמש בתעודה על מכונת הלקוח כדי לאמת בלתי נדרשת תחתן נתוני הזיהוי.

ב- PowerShell של הלקוח, קבל את טמבל התעודה של הלקוח על ידי חיפוש באחסון התעודות האישיות.

Get-ChildItem Cert:\CurrentUser\My

עכשיו ציין את הטמבל בפרמטר CertificateThumbprint לפקודת PSRemoting כמו בדוגמה למטה.

Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>

שים לב שמאחר ואימות על בסיס אישורים ניתן להשתמש בו רק עם מאזין HTTPS, השימוש ב־-UseSSL משמעי, להבדיל מאמצעי האימות האחרים בהם עליך לציין שימוש ב־SSL.

שלבים הבאים

עכשיו שלמדת כיצד להגדיר את WinRM על גבי SSL, למד עוד על PSRemoting בפוסט שלנו PSRemoting בפוורשל: המדריך האולטימטיבי!

רוצה ללמוד עוד על פוורשל באופן כללי, כולל המון דברים על PSRemoting? תבדוק פוורשל לסיסאדמינים, הספר!

Source:
https://adamtheautomator.com/winrm-ssl/