如果你想学习如何生成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.
让我给你讲一个关于如何使用PowerShell自动安装IIS服务器上的证书的故事。
任务
从客户端请求一个新的公共Digicert证书,将其安装在一个运行IIS 8.5的远程Windows Server 2012 R2 Core服务器中,设置一个SSL绑定到一个网站,并使用安装的证书进行绑定。简单吧?哈哈哈!
操作方法
简而言之,这需要X个步骤才能完成。
- 在将证书安装的计算机上生成一个IIS证书签名请求。在我的情况下,我只有WinRM访问权限,所以我必须使用
Invoke-Command
在远程服务器上执行certreq.exe并将CSR的内容发送到本地文件中。 - 將CSR送交公開的CA以獲得簽署(此處不提供幫助-與我合作的安全團隊剛剛返回了一個漂亮的證書)。在我的情況下,安全團隊將一組證書捲成一個.CER文件並交還給我,其中包括我正在尋找的證書以及中介證書。這需要一些調整才能正常運作。
- 在將證書安裝的電腦上完成證書簽署請求。這將使證書進入證書存儲庫。
- 在服務器上創建SSL IIS網絡綁定
- 將證書附加到網絡綁定
生成IIS證書請求
首先,您需要在遠程服務器上運行此PowerShell IIS腳本的任務是使用certreq.exe收集請求文件。為此,certreq.exe需要一個INF文件作為輸入。此文件用於設置您的證書將具有的各種選項。不多做解釋,這是我使用的INF文件的副本。
您將在New-CertificateSigningRequest
函數中看到,我使其非常容易自定義。實際上,如果您使用我的函數,您甚至不會看到這個文件,因為它只在創建CSR(請求文件)時暫時使用。
接下來,您需要將此INF文件放在遠程服務器上,並使用如下參數運行certreq.exe,例如certreq.exe -new "$InfFilePath" "$reqFilePath"
。
這將在遠程計算機上生成一個CSR(請求文件)。然後,您需要將此文件發送給您的安全團隊。這還將在本地機器上的“發出請求的證書”中創建一個包含私鑰和公鑰的證書。

完成IIS證書請求
在我的情況下,我得到了一個CER文件。我在這個PowerShell IIS腳本中創建了一個函數,將其直接導入本地機器上的個人存儲中,以發現IIS無法看到它。原因是證書還必須包含私鑰。只是將證書導入個人存儲將無法工作。我必須使用certreq.exe完成證書請求。
為此,您需要將從安全團隊接收到的證書副本複製到遠程服務器上,然後執行certreq.exe,例如certreq.exe -accept -machine "C:\issuedcert.cer"
。
您總是需要確保響應證書始終通過使用-machine
參數進入本地機器上下文。根據我閱讀的所有內容,這應該成功完成,但對我來說絕對沒有。由於某種原因,我收到了以下類似的錯誤:

結果發現,這意味著請求文件中的公鑰與安全團隊返回的公鑰不匹配。要測試這一點,只需運行certutil.exe -dump requestfile.req
和certutil -dumpissuedcert.cer
。滾動查看輸出,直到看到公鑰區域。

將每個私鑰複製出來,並在文本編輯器中進行比較,以確保它們相同。如果不相同,請聯繫您的安全團隊,因為他們沒有正確簽署您的請求!
如果它們匹配,那就沒問題,您不應該收到該錯誤消息。
創建SSL綁定
在遠程服務器上運行:
將證書附加到SSL綁定
在遠程服務器上運行:
獲取PowerShell IIS腳本
如果一切順利,您就完成了!現在,如果您需要一點幫助,我已經創建了三個函數,使這個過程變得更加簡單。前往我的Github存儲庫以獲取這些函數:
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
示例代碼
相關閱讀
請務必查看這篇關於使用PowerShell管理IIS的其他ATA博客文章
Source:
https://adamtheautomator.com/iis-certificate-request/