שליטה בבקשות לתעוזות IIS באמצעות PowerShell

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

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

I never got to the point where I completely understood the technology and it seemed like every task I tried to accomplish around that area seemed to never work out. It’s definitely an unforgiving technology for sure.

הנה לך סיפור על אוטומציה של התקנת אישור על שרת IIS באמצעות PowerShell.

המשימה

מלקוח, לבקש אישור ציבורי חדש מ-Digicert, להתקין אותו על שרת Windows Server 2012 R2 Core מרחוק הפועל IIS 8.5 בקבוצת עבודה, להגדיר קשר SSL לאתר ולהשתמש באישור שהותקן לקשר. פשוט, נכון? LOLz!

איך זה נעשה, בני?

בגדלום, נדרשות X צעדים כדי להגשיל זאת.

  1. ליצור בקשת חתימה לאישור IIS על המחשב שבו יותקן האישור. במקרה שלי, היה לי גישה רק דרך WinRM, ולכן הייתי צריך להפעיל את certreq.exe בשרת המרוחק באמצעות Invoke-Command ולשלוח את תוכן הבקשה לקובץ מקומי.
  2. השג את ה-CSR שחתום על ידי CA ציבורית. (אין עזרה כאן – התקבל תעודה יפה מאובטחת שחזרתי מקבוצת האבטחה שאני עובד עם). במקרה שלי, צוות האבטחה חזר אלי עם אוסף P7B של תעודות מגולגלות לתוך קובץ .CER הכולל את התעודה שחיפשתי וגם את התעודות האמצעיות. זה לקח לי קצת עשייה כדי שזה יעבוד.
  3. השלם את בקשת החתימה של התעודה במחשב שבו התעודה תותקנה. זה ישים את התעודה באחסון התעודות.
  4. צור חיבור SSL IIS בשרת.
  5. הוסף את התעודה לחיבור האיבר.

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

המשימה הראשונה שלך תהיה להפעיל את certreq.exe עם סקריפט PowerShell זה על השרת המרוחק כדי לאגד קובץ בקשה. כדי לעשות זאת, certreq.exe דורש קובץ INF כקלט. קובץ זה משמש לכל האפשרויות השונות של התעודה שלך. מבלי להיכנס לפרטים רבים, זהו העתק של קובץ ה-INF שהשתמשתי בו.

[Version]
Signature = "$Windows NT$"
[NewRequest]
Subject = "C=US,S=State,L=City,O=Company,OU=IT,CN=Name"
Exportable = TRUE
KeyLength = 2048
KeySpec = 1
KeyUsage = 0xa0
MachineKeySet = True
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
Silent = True
SMIME = False
RequestType = PKCS10

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

באופן הבא, תצטרך להשיג את קובץ ה-INF הזה בשרת המרוחק ולהפעיל certreq.exe עם הפרמטרים הבאים כמו certreq.exe -new "$InfFilePath" "$reqFilePath".

שזה ייצור קובץ CSR (בקשת קובץ) על המחשב המרוחק. תצטרך לשלוח את הקובץ הזה לצוות האבטחה שלך. זה ייצור גם תעודה הכוללת את שני המפתחות – הפרטי והציבורי – ב־`בקשות תעודה שניתן לאמת` בהקשר המכונה המקומית. `

Certificate service request in the Windows MMC snapin

`להשלמת בקשת התעודה של IIS

במקרה שלי, קיבלתי חזרה קובץ CER יחיד. ייצרתי פונקציה בתסריט PowerShell של IIS כדי לייבא את זה ישירות לאחסון האישי בהקשר המכונה המקומית וגיליתי שה-IIS לא רואה אותו. הסיבה הייתה שהתעודה הייתה צריכה לכלול גם את המפתח הפרטי. ייבוא פשוט של התעודה לאחסון האישי לא היה עובד. יידרש להשלים את בקשת התעודה באמצעות `certreq.exe`

. כדי לעשות זאת, יידרש להעתיק את התעודה שאתה מקבל מהצוות שלך לשרת המרוחק ולהריץ `certreq.exe` בצורה הבאה `certreq.exe -accept -machine "C:\issuedcert.cer"`.

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

Error requesting certificate

זה נראה שזה אומר שהמפתח הציבורי בקובץ הבקשה לא תואם את מה שחזר מצוות האבטחה. כדי לבדוק זאת, פשוט הרץ את `certutil.exe -dump requestfile.req` ו `certutil -dumpissuedcert.cer`. גלה למטה דרך הפלט עד שתראה את אזור המפתח הציבורי.

Encrypted public key

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

אם הם תואמים, אתה בסדר ולא צריך לקבל את השגיאה ההוא.

צור את הקשר SSL

על השרת המרוחק הרץ:

PS> Import-Module WebAdministration
PS> New-WebBinding -Name $WebsiteName -IP * -Port 443 -Protocol https

צרף את התעודה לקשר ה-SSL

על השרת המרוחק, הפעל:

PS> $certificate = Get-Item Cert:\localmachine\My\$Thumbprint
PS> $certificate | New-Item "IIS:\SSLBindings\0.0.0.0!443"

קבל את סקריפט ה- PowerShell של IIS

אם הכל הולך כמו שצריך, אתה אמור להיות בסיום! עכשיו, אם נדרשת עזרה קטנה לעשות את זה, יש לי שלוש פונקציות שיעזרו בזה. נסה לבדוק אותם במאגר הקוד שלי ב- Github:

https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates

https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS

קוד דוגמא

## שלח את הקובץ שמוציא את זה לאנשי התעודה שלך 
New-CertificateSigningRequest -SubjectHost 'somesubject' -FilePath 'C:\somefile.req' -ComputerName REMOTESERVER

## יבא את התעודה שקיבלת
Import-CertificateSigningRequestResponse -FilePath C:\issuedcert.cer -ComputerName REMOTESERVER

## צור את הקשר וצרף את התעודה.
New-IISWebBinding -ComputerName 'zapp09rpr01' -WebsiteName GHI -Protocol https -Port 443 -Certificate $cert

קריאה נוספת

וודא לבדוק פוסטים נוספים בבלוג של ATA לניהול IIS בעזרת PowerShell

Source:
https://adamtheautomator.com/iis-certificate-request/