设为首页 收藏本站
查看: 614|回复: 0

[经验分享] IIS:在多个Web服务器上管理多个证书

[复制链接]

尚未签到

发表于 2018-12-8 09:07:12 | 显示全部楼层 |阅读模式
  IIS:在多个Web服务器上管理多个证书
  原文:https://technet.microsoft.com/en-us/library/jj871065.aspx
  在大规模的Web环境管理证书是巨大的挑战。可能有上百台服务器拥有上百个SSL Web站点,都使用唯一的证书。在这么大规模的背景下,使用IIS管理器的图形界面来安装和维护证书是一个耗时的过程。
  不用害怕,有更好的方法。无论你有2个或者200个Web服务器,Windows PowerShell会将数日、数周或数月的时间消耗减少为几分钟。贯穿部署、安装和配置证书和站点的SSL,有方法可以定位到即将过期的证书,以便你可以替换它们。
  基本规则很简单:工作在IIS 7.5和IIS 8,但是你需要启用Windows PowerShell远程。例如,有两个Web服务器配置在一个负载均衡里,有它们自己的集群IP地址。每一个运行3个新的需要绑定证书的SSL Web站点。在代码里,我已经修改了集群IP地址为内部地址,而隐藏了实际的Web站点,但你能获得原理。我购买了新证书,并准备部署.pfx文件。这是站点的概要:

  •   Shop.Company.com – IP Address 192.168.3.201 – Cert: shop.company.com.pfx
  •   Update.Company.com – IP Address 192.168.3.202 – Cert: update.company.com.pfx
  •   Register.Company.com – IP Address 192.168.3.203 – Cert: register.company.com.pfx
  让我们开始在负载均衡的Web服务器部署和安装证书。
  Part1:部署和安装
  你需要开始做两件事 – 定义一个变量,包含Web服务器计算机名的的列表,另一个变量,到那些服务器上的每一台的Windows PowerShell远程会话。计算机名来自于一个文本文件,但是如果Web服务器是域成员,你可以从活动目录收集:
PS> $servers = Get-Content c:\webservers.txt  
PS> $session = New-PsSession –ComputerName $servers
  拷贝证书到远程服务器,以便于你安装它们。不用担心某人偷走了你的.pfx文件。在这个步骤完成前不要删除它们。需要说明的是,我的.pfx文件位于我客户端计算机的c:\sites\certpfx目录下:
PS> $servers | foreach-Object{  
copy-item -Path c:\sites\certpfx\*.* -Destination "\\$_\c$"}
  CertUtil.exe是通过Windows PowerShell远程会话安装证书的伟大工具。在以下每一行,每个Web服务器将会安装证书。记住,有3个证书被安装(每个站点1个),所以我重复了这个命令:
PS> Invoke-command -Session $session {  
certutil -p P@ssw0rd -importpfx c:\shop.company.com.pfx}
  
PS> Invoke-command -Session $session {
  
certutil -p P@ssw0rd -importpfx c:\update.company.com.pfx}
  
PS> Invoke-command -Session $session {
  
certutil -p P@ssw0rd -importpfx c:\register.company.com.pfx}
  当你使用CertUtil.exe,你需要为.pfx指定密码。因为我在实践中执行,只需要输入密码。如果你创建一个脚本,我推荐将密码替换为从提示获取密码的变量,例如:
PS> $Cred = (Get-Credential).password  确保从远程Web服务器删除.pfx文件,以防任何可能的证书失窃:
PS> $servers | foreach-object {Remove-Item -Path "\\$_\c$\*.pfx"}  随着在远程服务器上安装了证书,接下来为Web站点创建HTTPS绑定。
  Part2:创建Web站点绑定
  在负载均衡的每个服务器上的每个Web站点需要绑定HTTPS。使用WebAdministration模块的New-WebBinding,该功能将会成为一个管理单元。参数指定了站点名,协议,端口和站点的集群IP地址。SslFlags决定了用户绑定的证书的位置。
PS> Invoke-Command -session $session {Import-Module WebAdministration}  
PS> Invoke-command -Session $session {
  
New-WebBinding -name shop -Protocol https -Port 443 -IPAddress 192.168.3.201 -SslFlags 0}
  
PS> Invoke-command -Session $session {
  
New-WebBinding -name update -Protocol https -Port 443 -IPAddress 192.168.3.202 -SslFlags 0}
  
PS> Invoke-command -Session $session {
  
New-WebBinding -name register -Protocol https -Port 443 -IPAddress 192.168.3.203 -SslFlags 0}
  你刚安装的证书位于Windows证书存储中,选项有这些:

  •   0 – 在Windows证书存储中的一般证书
  •   1 – Server Name Indication (SNI)证书
  •   2 – 中央证书存储
  •   3 – 在中央证书存储中的SNI证书
  还有最后一步要完成,常常容易忘记:连接证书到新的Web站点绑定。
  Part3:绑定证书
  最后一步令人迷惑。图形IIS管理器隐藏了这一步的处理,如果你想站点使用SSL正常工作,你必需得做。你需要连接证书到Web站点的绑定。
  这是一个两阶段过程。首先,你得获得每个Web站点的证书的指纹,因此你可以创建一个合适的SSL绑定。记住,这个例子里我们有3个站点。我需要每个唯一证书的指纹。我选择存储指纹到3个不同的变量,因此,当我连接到Web站点时不会混淆:
PS> Invoke-Command -session $session {  
$CertShop=Get-ChildItem -Path Cert:\LocalMachine\My |
  
where-Object {$_.subject -like "*shop*"} |
  
Select-Object -ExpandProperty Thumbprint}
  
PS> Invoke-Command -session $session {
  
$CertUpdate=Get-ChildItem -Path Cert:\LocalMachine\My |
  
where-Object {$_.subject -like "*update*"} |
  
Select-Object -ExpandProperty Thumbprint}
  
PS> Invoke-Command -session $session {
  
$CertRegister=Get-ChildItem -Path Cert:\LocalMachine\My |
  
where-Object {$_.subject -like "*register*"} |
  
Select-Object -ExpandProperty Thumbprint}
  现在,是时候去使用指纹来收集完整的证书,并对每个Web站点分配为SSL绑定。以下命令使用Get-item来收集证书,然后New-item创建SSL绑定;IIS提供者IIS:\SslBindings使用以下绑定信息创建了SSL绑定:
PS> Invoke-Command -Session $session {  
get-item -Path "cert:\localmachine\my\$certShop" |
  
new-item -path IIS:\SslBindings\192.168.3.201!443}
  
PS> Invoke-Command -Session $session {
  
get-item -Path "cert:\localmachine\my\$certUpdate" |
  
new-item -path IIS:\SslBindings\192.168.3.202!443}
  
PS> Invoke-Command -Session $session {
  
get-item -Path "cert:\localmachine\my\$certRegister" |
  
new-item -path IIS:\SslBindings\192.168.3.203!443}
  在IIS里绑定信息正常显示为IPAddress:Port:Hostname (*:80:*)。然后,Windows PowerShell将冒号表示为路径指示器。当你使用Windows PowerShell来设置绑定信息,你需要使用感叹号代替。
  现在绑定完成,你需要使用HTTPS来访问Web站点,描述如下:
PS> start iexplore https://shop.company.com  
PS> start iexplore https://update.company.com
  
PS> start iexplore https://register.company.com
  Part4:检查过期
  有另一个有用的解决方案涵盖了刚才你所学的所有信息。对于你们中的大多数来说是一个普通的商业挑战:你的证书是否即将过期?
  管理证书的部分工作是,确定是否即将过期,以便你可以替换它们。对于这个问题,你可以应用这个主题的技巧。只需要一行行来。你还需要对所有需要检查证书过期的Web服务器启用Windows PowerShell远程会话。
  以下示例在localmachine证书存储中扫描了所有的证书。它将自定义变量ExpireInDays的过期属性notafter与当前时间比较。过滤器(Where-Object)检查了过期时间少于90天的证书。这个命令列出了服务器名和即将过期的证书:
PS> Invoke-Command -Session $session {  
Get-ChildItem -Path Cert:\LocalMachine\My |
  
Select-Object -Property PSComputerName, Subject, @{
  
n='ExpireInDays';e={($_.notafter - (Get-Date)).Days}} |
  
Where-Object {$_.ExpireInDays -lt 90}}
  使用所有你从这里学习到的,你可以成功并快速的使用Windows Powershell替换掉那些证书,即便规模很大。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-644527-1-1.html 上篇帖子: iis中添加视频播放支持mp4文件、flv文件等 下篇帖子: Windows Nano Server安装配置详解07:部署IIS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表