分享方式:


用於偵測 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 憑證提供者來瀏覽憑證存放區中的可用憑證。這可確保使用有效的憑證設定服務。您可以在憑證提供者 (https://go.microsoft.com/fwlink/?LinkId=194421) (可能為英文網頁) 中找到如何使用 Windows PowerShell 憑證提供者的詳細資訊。

    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 屬性都會以實際的執行階段預設值取代。

接著,指令碼會依據組態中指定的查詢來擷取作業系統憑證存放區中的憑證資訊。Managed 程式碼 System.Security.Cryptography.X509Certificates API 會用於查詢。

最後,指令碼會針對目前的時間驗證憑證的 NotBeforeNotAfter 屬性並格式化輸出。

協助程式函式

  • ResolveDefaultValue - 解析 Get-ASAppServiceCertificate Cmdlet 傳回之設定屬性的執行階段預設值。

  • FindCertificates - 使用 System.Security.Cryptography.X509Certificates API 查詢憑證存放區。

  2012-03-05