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服务器是域成员,你可以从活动目录收集:

1
2
PS>  $servers  Get-Content  c:\webservers.txt
PS>  $session  New-PsSession  –ComputerName  $servers


拷贝证书到远程服务器,以便于你安装它们。不用担心某人偷走了你的.pfx文件。在这个步骤完成前不要删除它们。需要说明的是,我的.pfx文件位于我客户端计算机的c:\sites\certpfx目录下:

1
2
PS>  $servers  foreach-Object {
copy-item  -Path c:\sites\certpfx\*.* -Destination  "\\$_\c$" }


CertUtil.exe是通过Windows PowerShell远程会话安装证书的伟大工具。在以下每一行,每个Web服务器将会安装证书。记住,有3个证书被安装(每个站点1个),所以我重复了这个命令:

1
2
3
4
5
6
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指定密码。因为我在实践中执行,只需要输入密码。如果你创建一个脚本,我推荐将密码替换为从提示获取密码的变量,例如:

1
PS>  $Cred  = ( Get-Credential ).password


确保从远程Web服务器删除.pfx文件,以防任何可能的证书失窃:

1
PS>  $servers  foreach-object  { Remove-Item  -Path  "\\$_\c$\*.pfx" }


随着在远程服务器上安装了证书,接下来为Web站点创建HTTPS绑定。



Part2:创建Web站点绑定


在负载均衡的每个服务器上的每个Web站点需要绑定HTTPS。使用WebAdministration模块的New-WebBinding,该功能将会成为一个管理单元。参数指定了站点名,协议,端口和站点的集群IP地址。SslFlags决定了用户绑定的证书的位置。

1
2
3
4
5
6
7
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站点时不会混淆:

1
2
3
4
5
6
7
8
9
10
11
12
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绑定:

1
2
3
4
5
6
7
8
9
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站点,描述如下:

1
2
3
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天的证书。这个命令列出了服务器名和即将过期的证书:

1
2
3
4
5
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替换掉那些证书,即便规模很大。
















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1885148 ,如需转载请自行联系原作者




相关文章
|
19天前
|
安全 应用服务中间件 网络安全
实战经验分享:利用免费SSL证书构建安全可靠的Web应用
本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
60 3
|
3月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
57 3
|
4月前
|
SQL 开发框架 安全
Web安全-IIS短文件名泄露
Web安全-IIS短文件名泄露
80 2
|
5月前
|
JavaScript 搜索推荐 前端开发
从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果
【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。
119 1
|
5月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
234 0
|
5月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
49 0
|
5月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
66 0
|
5天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
|
4天前
|
存储 运维 安全
阿里云弹性裸金属服务器是什么?产品规格及适用场景介绍
阿里云服务器ECS包括众多产品,其中弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。分钟级的交付周期将提供给您实时的业务响应能力,助力您的核心业务飞速成长。本文为大家详细介绍弹性裸金属服务器的特点、优势以及与云服务器的对比等内容。

热门文章

最新文章