WCF/WF 服务用于检测过期证书的 Windows PowerShell 脚本

指定将由 WCF/WF 服务使用的证书的配置如下所示:

    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name="MyBehavior">
            <serviceCredentials>
              <serviceCertificate findValue="86F9D16EAF13CF2E7C1744AD8DB4F04BEF55833B" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>

该配置是操作系统证书存储的一个查询字符串。将查询从服务配置映射到实际证书以及验证诸如过期日期之类的信息,不是一个简单的任务。

本示例演示如何编写具有以下条件的 Windows PowerShell 脚本:

  • 基于 AppFabric 配置 cmdlet 返回的服务配置信息执行证书查询。

  • 在查询的证书上执行验证并返回过期的证书列表。

备注

提供这些示例仅是为了教育目的。它们不能用于生产环境,并且尚未在生产环境中进行测试。Microsoft 不对这些示例提供技术支持。

先决条件

用户应该熟悉 Windows PowerShell 脚本和 AppFabric cmdlet。

本示例具有以下先决条件:

  • 安装了 Windows PowerShell v2。

  • 已执行默认的 AppFabric 安装。

示例位置和文件

示例文件包括以下内容:

  • Readme.mhtml

  • Code\detectExpiredCertificates.ps1

设置和运行此示例

  1. 以下示例演示如何运行脚本:

    PS> cd <samples>\Samples\Management\DetectExpiredCertificate\Code
    PS> .\detectExpiredCertificates.ps1 "Default Web Site" /MyApp
    Thumbprint                                   Subject           NotBefore                                NotAfter                                               
    ----------                                   -------           ---------                                --------                                               
    2E99C509D371836647EA1A0D4CE4756F21B1CD2C                       1/5/2009 12:27:22 AM                     1/5/2010 12:27:22 AM    
    

    备注

    您需要将执行策略从 Restricted 更改为 RemoteSigned,本示例才能正常运行。有关详细信息,请参阅 help Set-ExecutionPolicy

    备注

    两个参数指定检测的作用域,即站点名称与虚拟路径的组合。在上面的示例中,将检查“MyApp”应用程序下的每个服务,看证书是否过期。这些参数是可选的;如果没有指定这些参数,则将使用服务器作用域。如果指定的作用域下没有配置证书或者没有证书过期,则该脚本将不会显示任何输出。

  2. 您可以使用 Windows PowerShell 证书提供程序导航证书存储中可用的证书。这可以帮助您使用有效的证书配置您的服务。有关如何使用 Windows PowerShell 证书提供程序的详细信息,可以在证书提供程序 (https://go.microsoft.com/fwlink/?LinkId=194421) 上找到。

    PS cd cert:\LocalMachine\My
    PS cert:\LocalMachine\My> dir | select *
    <results omitted>
    

删除本示例

  1. 只是关闭 Windows PowerShell 会话。运行本示例不会修改计算机上的任何资源。

说明

本示例的脚本具有三个部分:

初始化

脚本的第一部分确保已加载 AppFabric cmdlet 模块。

if ((Get-Command -Module ApplicationServer) -eq $null)
{
    Import-Module ApplicationServer
}

主脚本

主脚本首先通过调用 AppFabric Get-ASAppService cmdlet 检索给定作用域下的 WCF/WF 服务列表。然后通过管道将该服务列表传输到 Get-ASAppServiceCertificate cmdlet 以读取服务证书配置。请注意,此 cmdlet 返回的所有 $null 属性都会被替换为实际运行时默认值。

然后,该脚本从操作系统的证书存储中基于配置中指定的查询检索证书信息。托管代码 System.Security.Cryptography.X509Certificates API 用于此查询。

最后,该脚本针对当前时间验证证书 NotBeforeNotAfter 属性,并格式化输出。

Helper 函数

  • ResolveDefaultValue - 解析由 Get-ASAppServiceCertificate cmdlet 返回的配置属性的运行时默认值。

  • FindCertificates - 使用 System.Security.Cryptography.X509Certificates API 查询证书存储。

  2011-12-05