作法:建立開發時要使用的暫時憑證

當使用 Windows Communication Foundation (WCF) 開發安全的服務或用戶端時,常常必須提供要用來做為認證的 X.509 憑證。 憑證通常是憑證鏈結的一部分,在電腦的 [受信任的根憑證授權單位] 存放區中有根授權。 具有憑證鏈結可讓您設定一組憑證的範圍,其中根授權通常來自您的組織或企業單位。 如果要在開發期間進行模擬,您可以建立兩種憑證以滿足安全性需求。 第一種是放在 [受信任的根憑證授權單位] 存放區中的自我簽署憑證,而第二種憑證是從第一種建立的,並放在個人存放區或本機位置,或目前使用者位置的個人存放區。 本主題會逐步解說使用 PowerShell New-SelfSignedCertificate) Cmdlet 來建立這兩個憑證的步驟。

重要

New-SelfSignedCertificate Cmdlet 所產生的憑證僅供測試之用。 當部署服務或用戶端時,請確定使用由憑證授權單位所提供的適當憑證。 這可能是來自您組織中的 Windows Server 憑證伺服器或協力廠商。

根據預設,New-SelfSignedCertificate Cmdlet 會建立自我簽署的憑證,而這些憑證並不安全。 將自我簽署憑證放在「信任的根憑證授權單位」存放區可讓您建立模擬程度更高的開發環境。

如需建立和使用憑證的詳細資訊,請參閱使用憑證。 如需使用憑證做為認證的詳細資訊,請參閱保護服務和用戶端。 如需有關使用 Microsoft Authenticode 技術的教學課程,請參閱 Authenticode 概觀與教學課程 (英文)

建立自我簽署根授權憑證及匯出私密金鑰

下列命令會在「目前使用者個人」存放區中建立主體名稱為「RootCA」的自我簽署憑證。

$rootCert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -DnsName "RootCA" -TextExtension @("2.5.29.19={text}CA=true") -KeyUsage CertSign,CrlSign,DigitalSignature

我們需要將憑證匯出至 PFX 檔案,以便將其匯入到後續步驟所需的位置。 使用私密金鑰匯出憑證時,需要以密碼保護憑證。 我們會將密碼儲存在 SecureString,並使用 Export-PfxCertificate Cmdlet 將具有相關聯私密金鑰的憑證匯出至 PFX 檔案。 我們也會使用 Export-Certificate Cmdlet,只將公用憑證儲存到 CRT 檔案。

[System.Security.SecureString]$rootCertPassword = ConvertTo-SecureString -String "password" -Force -AsPlainText
[String]$rootCertPath = Join-Path -Path 'cert:\CurrentUser\My\' -ChildPath "$($rootCert.Thumbprint)"
Export-PfxCertificate -Cert $rootCertPath -FilePath 'RootCA.pfx' -Password $rootCertPassword
Export-Certificate -Cert $rootCertPath -FilePath 'RootCA.crt'

建立由根授權憑證簽署的新憑證

下列命令會使用簽發者的私密金鑰,建立由主體名稱為「SignedByRootCA」的 RootCA 所簽署的憑證。

$testCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "SignedByRootCA" -KeyExportPolicy Exportable -KeyLength 2048 -KeyUsage DigitalSignature,KeyEncipherment -Signer $rootCert

同樣地,我們會將具有私密金鑰的已簽署憑證儲存到 PFX 檔案,而只將公開金鑰儲存到 CRT 檔案中。

[String]$testCertPath = Join-Path -Path 'cert:\LocalMachine\My\' -ChildPath "$($testCert.Thumbprint)"
Export-PfxCertificate -Cert $testCertPath -FilePath testcert.pfx -Password $rootCertPassword
Export-Certificate -Cert $testCertPath -FilePath testcert.crt

在受信任的根憑證授權單位存放區中安裝憑證

在建立自我簽署憑證之後,您就可以將它安裝在 [受信任的根憑證授權單位] 存放區中。 此時任何使用憑證簽署的憑證都受到電腦的信任。 因此,當您不再需要憑證時,請立刻從存放區中將其刪除。 當您刪除這個根授權憑證時,使用該憑證簽署的所有其他憑證都會變成未經授權的。 根授權憑證只是一種機制,可依需要設定一組憑證的範圍。 例如,在對等應用程式中,通常不需要根授權,因為您只是藉由個體提供的憑證而信任其身分識別。

在受信任的根憑證授權單位中安裝自我簽署憑證

  1. 請開啟憑證嵌入式管理單元。 如需詳細資訊,請參閱如何:使用 MMC 嵌入式管理單元來檢視憑證

  2. 開啟資料夾以儲存憑證,可以是 [ 本機電腦 ] 或 [ 目前使用者]。

  3. 開啟 [ 受信任的根憑證授權單位 ] 資料夾。

  4. 用滑鼠右鍵依序按一下 [ 憑證 ] 資料夾、[ 所有工作] 和 [ 匯入]。

  5. 請依照螢幕上的精靈指示,將 RootCA.pfx 匯入存放區中。

搭配 WCF 使用憑證

設定暫時憑證之後,您可以用它來開發可將憑證指定為用戶端認證類型的 WCF 方案。 例如,下列 XML 組態會指定訊息安全性,而且將憑證指定為用戶端認證類型。

若要將憑證指定為用戶端認證類型

  1. 在服務的組態檔中,使用下列 XML 將安全性模式設定為訊息,而且將用戶端認證類型設定為憑證。

    <bindings>
      <wsHttpBinding>
        <binding name="CertificateForClient">
          <security>
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    
  2. 在用戶端的組態檔中,使用下列 XML 指定憑證位於使用者的存放區,而且可藉由在 SubjectName 欄位中搜尋值「CohoWinery」找到憑證。

    <behaviors>
      <endpointBehaviors>
        <behavior name="CertForClient">
          <clientCredentials>
            <clientCertificate findValue="CohoWinery" x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

如需在 WCF 中使用憑證的詳細資訊,請參閱 Working with Certificates

.NET Framework 安全性

請用滑鼠右鍵按一下憑證,然後按一下 [ 刪除 ],以確定從 [ 受信任的根憑證授權單位 ] 和 [ 個人] 資料夾中刪除暫時的根授權憑證。

另請參閱