

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 使用 Microsoft SignTool AWS CloudHSM 來簽署檔案
<a name="third-signtool-toplevel"></a>

AWS CloudHSM 支援使用 Microsoft Signtool 透過用戶端 SDK 3 和用戶端 SDK 5 簽署檔案。使用這些工具的步驟會根據您目前下載的用戶端 SDK 版本而有所不同。下列各節提供每個 SDK 的資訊。

**Topics**
+ [用戶端 SDK 5 搭配 Microsoft SignTool](signtool-sdk5.md)
+ [用戶端 SDK 3 搭配 Microsoft SignTool](signtool-sdk3.md)

# 使用 Microsoft SignTool 搭配用戶端 SDK 5 來簽署檔案
<a name="signtool-sdk5"></a>

在加密和公開金鑰基礎設施 (PKI) 中，數位簽章是用來確認資料已由可信任的實體傳送。此簽章也代表傳輸中的資料未經過篡改。簽章是一種由寄件者的私有金鑰產生的加密雜湊。接收者可以使用寄件者的公有金鑰解密其雜湊簽章，以驗證資料完整性。因此，應該由寄件者負責維護數位憑證。數位憑證代表寄件者的私有金鑰擁有權，並可將解密所需的公有金鑰提供給接收者。只要私有金鑰由寄件者擁有，就可以信任簽章。 AWS CloudHSM 提供安全的 FIPS 140-2 第 3 級驗證硬體，讓您使用獨佔的單一租用戶存取來保護這些金鑰。

許多組織使用 Microsoft SignTool，這是一種命令列工具，可簽署、驗證檔案，並加入時間戳記，以簡化程式碼簽署程序。您可以使用 AWS CloudHSM 安全地存放金鑰對，直到 SignTool 需要它們為止，因此建立可輕鬆自動化的工作流程來簽署資料。

下列主題提供如何使用 SignTool 搭配 的概觀 AWS CloudHSM。

**Topics**
+ [步驟 1：設定先決條件](#signtool-sdk5-prereqs)
+ [步驟 2：建立簽署憑證](#signtool-sdk5-csr)
+ [步驟 3：簽署檔案](#signtool-sdk5-sign)

## 步驟 1：設定先決條件
<a name="signtool-sdk5-prereqs"></a>

若要搭配 使用 Microsoft SignTool AWS CloudHSM，您需要下列項目：
+ 執行 Windows 作業系統的 Amazon EC2 用戶端執行個體。
+ 憑證授權單位 (CA)；不論是自己維護，或由第三方供應商建立。
+ 與 EC2 執行個體位於相同虛擬公有雲端 (VPC) 中的作用中 AWS CloudHSM 叢集。叢集必須至少包含一個 HSM。
+ 在 AWS CloudHSM 叢集中擁有和管理金鑰的加密使用者 (CU)。
+ 未簽署的檔案或可執行檔。
+ Microsoft Windows 軟體開發套件 (SDK)。

**設定 AWS CloudHSM 搭配 Windows SignTool 使用 的先決條件**

1. 請依照本指南中[入門](getting-started.md)一節的說明，來啟動 Windows EC2 執行個體與 AWS CloudHSM 叢集。

1. 如果您想要託管自己的 Windows Server CA，請遵循將 [Windows Server 設定為憑證授權單位 AWS CloudHSM](win-ca-overview-sdk5.md)中的步驟 1 和 2。否則，請繼續使用您公開信任的第三方 CA。

1. 在您的 Windows EC2 執行個體上，下載並安裝下列其中一個版本的 Microsoft Windows 軟體開發套件：
   + [Microsoft Windows SDK 10](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk)
   + [Microsoft Windows SDK 8.1](https://developer.microsoft.com/en-us/windows/downloads/windows-8-1-sdk)
   + [Microsoft Windows SDK 7](https://www.microsoft.com/en-us/download/details.aspx?id=8279)

   `SignTool` 可執行檔是 Windows SDK Signing Tools for Desktop Apps 安裝功能的一部分。如果您不需要其他功能，可以省略其安裝。預設安裝位置為：

   ```
   C:\Program Files (x86)\Windows Kits\<SDK version>\bin\<version number>\<CPU architecture>\signtool.exe
   ```

您現在可以使用 Microsoft Windows 開發套件、 AWS CloudHSM 叢集和 CA 來[建立簽署憑證](#signtool-sdk5-csr)。

## 步驟 2：建立簽署憑證
<a name="signtool-sdk5-csr"></a>

現在您已將 Windows SDK 下載到您的 EC2 執行個體上，即可使用它來產生憑證簽署請求 (CSR)。CSR 是未簽署的憑證，最終會傳遞到您的 CA 以進行簽署。在這個範例中，我們使用 Windows SDK 隨附的 `certreq` 可執行檔，來產生 CSR。

**使用 `certreq` 可執行檔來產生 CSR**

1. 如果您尚未連線至 Windows EC2 執行個體，請先進行連線。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[連線至您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-connect-to-instance-windows)。

1. 建立名為 `request.inf` 的檔案，其中包含以下各行。將 `Subject` 資訊取代為您組織的相關資訊。如需每個參數的說明，請參閱 [Microsoft 文件](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certreq_1#BKMK_New)。

   ```
   [Version]
   Signature= $Windows NT$
   [NewRequest]
   Subject = "C=<Country>,CN=<www.website.com>,O=<Organization>,OU=<Organizational-Unit>,L=<City>,S=<State>"
   RequestType=PKCS10
   HashAlgorithm = SHA256
   KeyAlgorithm = RSA
   KeyLength = 2048
   ProviderName = "CloudHSM Key Storage Provider"
   KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE"
   MachineKeySet = True
   Exportable = False
   ```

1. 執行 `certreq.exe`。在此範例中，我們將 CSR 儲存為 `request.csr`。

   ```
   certreq.exe -new request.inf request.csr
   ```

   在內部，會在您的 AWS CloudHSM 叢集上產生新的金鑰對，並使用該對的私有金鑰來建立 CSR。

1. 將 CSR 提交給您的 CA。如果您使用的是 Windows Server CA，請依照下列步驟進行：

   1. 輸入下列命令以開啟 CA 工具：

      ```
      certsrv.msc
      ```

   1. 在新的視窗中，以滑鼠右鍵按一下 CA 伺服器的名稱。選擇 **All Tasks (所有任務)**，然後選擇 **Submit new request (提交新請求)**。

   1. 導覽至 `request.csr` 的位置，然後選擇 **Open (開啟)**。

   1. 展開**伺服器 CA** 功能表，導覽至**待處理的請求**資料夾。用滑鼠右鍵按一下您剛建立的請求，並在 **All Tasks (所有任務)** 下方選擇 **Issue (發行)**。

   1. 現在，導覽至 **Issued Certificates (發行的憑證)** 資料夾 (位於 **Pending Requests (待處理的請求)** 資料夾上方)。

   1. 選擇 **Open (開啟)** 以檢視憑證，然後選擇 **Details (詳細資訊)** 標籤。

   1. 選擇 **Copy to File (複製到檔案)** 來啟動 [憑證匯出精靈]。將 DER 編碼的 X.509 檔案以 `signedCertificate.cer` 名稱儲存到安全的位置。

   1. 結束 CA 工具，並使用下列命令，將憑證檔案移至 Windows 的個人憑證存放區中。其他應用程式即可使用此憑證。

      ```
      certreq.exe -accept signedCertificate.cer
      ```

您現在可以使用匯入的憑證來[簽署檔案](#signtool-sdk5-sign)。

## 步驟 3：簽署檔案
<a name="signtool-sdk5-sign"></a>

您現在可以開始使用 SignTool 和匯入的憑證，來簽署您的範例檔案。若要執行此作業，您需要知道憑證的 SHA-1 雜湊或「指紋」**。指紋是用來確保 SignTool 只使用經過 AWS CloudHSM驗證的憑證。在這個範例中，我們使用 PowerShell 取得憑證的雜湊。您也可以使用 CA 的 GUI 或 Windows 軟體開發套件的 `certutil` 可執行檔。

**取得憑證的指紋，並使用它來簽署檔案**

1. 以管理員身分開啟 PowerShell，並執行下列命令：

   ```
   Get-ChildItem -path cert:\LocalMachine\My
   ```

   複製傳回的 `Thumbprint`。  
![\[系統會以指紋形式傳回憑證的雜湊\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/images/signtool-hash.png)

1. 導覽至 PowerShell 中包含 `SignTool.exe` 的目錄。預設位置為 `C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64`。

1. 最後，執行以下命令簽署您的檔案。如果命令成功，PowerShell 會傳回成功訊息。

   ```
   signtool.exe sign /v /fd sha256 /sha1 <thumbprint> /sm C:\Users\Administrator\Desktop\<test>.ps1
   ```  
![\[已成功簽署 .ps1 檔案。\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/images/signtool-last-command.png)

1. (選用) 若要驗證檔案上的簽章，請使用下列命令：

   ```
   signtool.exe verify /v /pa C:\Users\Administrator\Desktop\<test>.ps1
   ```

# 使用 Microsoft SignTool 搭配用戶端 SDK 3 來簽署檔案
<a name="signtool-sdk3"></a>

在加密和公開金鑰基礎設施 (PKI) 中，數位簽章是用來確認資料已由可信任的實體傳送。此簽章也代表傳輸中的資料未經過篡改。簽章是一種由寄件者的私有金鑰產生的加密雜湊。接收者可以使用寄件者的公有金鑰解密其雜湊簽章，以驗證資料完整性。因此，應該由寄件者負責維護數位憑證。數位憑證代表寄件者的私有金鑰擁有權，並可將解密所需的公有金鑰提供給接收者。只要私有金鑰由寄件者擁有，就可以信任簽章。 AWS CloudHSM 提供安全的 FIPS 140-2 第 3 級驗證硬體，讓您使用獨佔的單一租用戶存取來保護這些金鑰。

許多組織使用 Microsoft SignTool，這是一種命令列工具，可簽署、驗證檔案，並加入時間戳記，以簡化程式碼簽署程序。您可以使用 AWS CloudHSM 安全地存放您的金鑰對，直到 SignTool 需要它們為止，因此可建立輕鬆自動化的工作流程來簽署資料。

下列主題提供如何使用 SignTool 搭配 的概觀 AWS CloudHSM。

**Topics**
+ [步驟 1：設定先決條件](#signtool-sdk3-prereqs)
+ [步驟 2：建立簽署憑證](#signtool-sdk3-csr)
+ [步驟 3：簽署檔案](#signtool-sdk3-sign)

## 步驟 1：設定先決條件
<a name="signtool-sdk3-prereqs"></a>

若要搭配 使用 Microsoft SignTool AWS CloudHSM，您需要下列項目：
+ 執行 Windows 作業系統的 Amazon EC2 用戶端執行個體。
+ 憑證授權單位 (CA)；不論是自己維護，或由第三方供應商建立。
+ 與 EC2 執行個體位於相同虛擬公有雲端 (VPC) 中的作用中 AWS CloudHSM 叢集。叢集必須至少包含一個 HSM。
+ 在 AWS CloudHSM 叢集中擁有和管理金鑰的加密使用者 (CU)。
+ 未簽署的檔案或可執行檔。
+ Microsoft Windows 軟體開發套件 (SDK)。

**設定 AWS CloudHSM 搭配 Windows SignTool 使用 的先決條件**

1. 請依照本指南中[入門](getting-started.md)一節的說明，來啟動 Windows EC2 執行個體與 AWS CloudHSM 叢集。

1. 如果您想要託管自己的 Windows Server CA，請遵循將 [Windows Server 設定為憑證授權單位 AWS CloudHSM](win-ca-overview-sdk3.md)中的步驟 1 和 2。否則，請繼續使用您公開信任的第三方 CA。

1. 在您的 Windows EC2 執行個體上，下載並安裝下列其中一個版本的 Microsoft Windows 軟體開發套件：
   + [Microsoft Windows SDK 10](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk)
   + [Microsoft Windows SDK 8.1](https://developer.microsoft.com/en-us/windows/downloads/windows-8-1-sdk)
   + [Microsoft Windows SDK 7](https://www.microsoft.com/en-us/download/details.aspx?id=8279)

   `SignTool` 可執行檔是 Windows SDK Signing Tools for Desktop Apps 安裝功能的一部分。如果您不需要其他功能，可以省略其安裝。預設安裝位置為：

   ```
   C:\Program Files (x86)\Windows Kits\<SDK version>\bin\<version number>\<CPU architecture>\signtool.exe
   ```

您現在可以使用 Microsoft Windows SDK、 AWS CloudHSM 叢集和 CA 來[建立簽署憑證](#signtool-sdk3-csr)。

## 步驟 2：建立簽署憑證
<a name="signtool-sdk3-csr"></a>

現在您已將 Windows SDK 下載到您的 EC2 執行個體上，即可使用它來產生憑證簽署請求 (CSR)。CSR 是未簽署的憑證，最終會傳遞到您的 CA 以進行簽署。在這個範例中，我們使用 Windows SDK 隨附的 `certreq` 可執行檔，來產生 CSR。

**使用 `certreq` 可執行檔來產生 CSR**

1. 如果您尚未連線至 Windows EC2 執行個體，請先進行連線。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[連線至您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-connect-to-instance-windows)。

1. 建立名為 `request.inf` 的檔案，其中包含以下各行。將 `Subject` 資訊取代為您組織的相關資訊。如需每個參數的說明，請參閱 [Microsoft 文件](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certreq_1#BKMK_New)。

   ```
   [Version]
   Signature= $Windows NT$
   [NewRequest]
   Subject = "C=<Country>,CN=<www.website.com>,O=<Organization>,OU=<Organizational-Unit>,L=<City>,S=<State>"
   RequestType=PKCS10
   HashAlgorithm = SHA256
   KeyAlgorithm = RSA
   KeyLength = 2048
   ProviderName = "Cavium Key Storage Provider"
   KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE"
   MachineKeySet = True
   Exportable = False
   ```

1. 執行 `certreq.exe`。在此範例中，我們將 CSR 儲存為 `request.csr`。

   ```
   certreq.exe -new request.inf request.csr
   ```

   在內部，會在您的 AWS CloudHSM 叢集上產生新的金鑰對，並使用該對的私有金鑰來建立 CSR。

1. 將 CSR 提交給您的 CA。如果您使用的是 Windows Server CA，請依照下列步驟進行：

   1. 輸入下列命令以開啟 CA 工具：

      ```
      certsrv.msc
      ```

   1. 在新的視窗中，以滑鼠右鍵按一下 CA 伺服器的名稱。選擇 **All Tasks (所有任務)**，然後選擇 **Submit new request (提交新請求)**。

   1. 導覽至 `request.csr` 的位置，然後選擇 **Open (開啟)**。

   1. 展開**伺服器 CA** 功能表，導覽至**待處理的請求**資料夾。用滑鼠右鍵按一下您剛建立的請求，並在 **All Tasks (所有任務)** 下方選擇 **Issue (發行)**。

   1. 現在，導覽至 **Issued Certificates (發行的憑證)** 資料夾 (位於 **Pending Requests (待處理的請求)** 資料夾上方)。

   1. 選擇 **Open (開啟)** 以檢視憑證，然後選擇 **Details (詳細資訊)** 標籤。

   1. 選擇 **Copy to File (複製到檔案)** 來啟動 [憑證匯出精靈]。將 DER 編碼的 X.509 檔案以 `signedCertificate.cer` 名稱儲存到安全的位置。

   1. 結束 CA 工具，並使用下列命令，將憑證檔案移至 Windows 的個人憑證存放區中。其他應用程式即可使用此憑證。

      ```
      certreq.exe -accept signedCertificate.cer
      ```

您現在可以使用匯入的憑證來[簽署檔案](#signtool-sdk3-sign)。

## 步驟 3：簽署檔案
<a name="signtool-sdk3-sign"></a>

您現在可以開始使用 SignTool 和匯入的憑證，來簽署您的範例檔案。若要執行此作業，您需要知道憑證的 SHA-1 雜湊或「指紋」**。指紋是用來確保 SignTool 只使用經過 AWS CloudHSM驗證的憑證。在這個範例中，我們使用 PowerShell 取得憑證的雜湊。您也可以使用 CA 的 GUI 或 Windows 軟體開發套件的 `certutil` 可執行檔。

**取得憑證的指紋，並使用它來簽署檔案**

1. 以管理員身分開啟 PowerShell，並執行下列命令：

   ```
   Get-ChildItem -path cert:\LocalMachine\My
   ```

   複製傳回的 `Thumbprint`。  
![\[系統會以指紋形式傳回憑證的雜湊\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/images/signtool-hash.png)

1. 導覽至 PowerShell 中包含 `SignTool.exe` 的目錄。預設位置為 `C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64`。

1. 最後，執行以下命令簽署您的檔案。如果命令成功，PowerShell 會傳回成功訊息。

   ```
   signtool.exe sign /v /fd sha256 /sha1 <thumbprint> /sm C:\Users\Administrator\Desktop\<test>.ps1
   ```  
![\[已成功簽署 .ps1 檔案。\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/images/signtool-last-command.png)

1. (選用) 若要驗證檔案上的簽章，請使用下列命令：

   ```
   signtool.exe verify /v /pa C:\Users\Administrator\Desktop\<test>.ps1
   ```