﻿# 如何正確安裝政府簽發的憑證到正式主機

我之前為了要讓我的 ASP.NET 可以寄出 S/MIME 簽章過的郵件費了好大一番功夫，在開發環境與測試環境解決了【[ASP.NET 使用 X509Certificate2 類別匯入憑證檔時發生錯誤](/post/2009/04/14/Importing-a-PFX-file-using-X509Certificate-from-ASPNET-fails)】與【[CryptographicException: 控制碼無效(The handle is invalid)](/post/2009/04/17/CryptographicException-The-handle-is-invalid)】問題，但是正式部署到正式機時竟然又出現另一個錯誤：A certificate chain could not be built to a trusted root authority.

由於本次安裝的憑證是由**政府憑證管理中心**所簽發的，會出現【A certificate chain could not be built to a trusted root authority.】的錯誤就是因為本機電腦不信任這張憑證的「根憑證」所致。

如下圖所示，你先開啟「本機電腦」的「個人/憑證」區，並點選開啟你先前匯入的憑證，再切換到「憑證路徑」頁籤，這時你可以看到這張憑證其實有兩個「根憑證」，你必須將這兩張憑證都匯入到「信任的根憑證授權」的憑證儲存區才行！

![先開啟「本機電腦」的「個人/憑證」區，並點選開啟你先前匯入的憑證，再切換到「憑證路徑」頁籤，這時你可以看到這張憑證其實有兩個「根憑證」，你必須將這兩張憑證都匯入到「信任的根憑證授權」的憑證儲存區才行！](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e41b58c7af339438cb88-image_3.png "先開啟「本機電腦」的「個人/憑證」區，並點選開啟你先前匯入的憑證，再切換到「憑證路徑」頁籤，這時你可以看到這張憑證其實有兩個「根憑證」，你必須將這兩張憑證都匯入到「信任的根憑證授權」的憑證儲存區才行！")

照理說 "**TW Government Root Certification Authority**" 這張憑證是不需要額外安裝到「信任的根憑證授權」的憑證儲存區中的，因為若你有正常定期執行 Windows Update 的話，這張憑證就會自動被安裝到信任的根憑證中！而這次我們安裝的主機看似已經很久沒有執行 Windows Update 了，所以才會遇到這個問題。

若要手動將這兩張憑證匯入到「信任的根憑證授權」的憑證儲存區必須依照以下步驟進行：

1\. 先點選最上層的根憑證，並點選「檢視憑證」按鈕

![先點選最上層的根憑證，並點選「檢視憑證」按鈕](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/cade8c58c2a8664f68e9-image_6.png "先點選最上層的根憑證，並點選「檢視憑證」按鈕")

2\. 接著點選「詳細資料」頁籤，再點選「複製到檔案」進行憑證匯出

![接著點選「詳細資料」頁籤，再點選「複製到檔案」進行憑證匯出](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/01c918d1d0a53b0ea143-image_9.png "接著點選「詳細資料」頁籤，再點選「複製到檔案」進行憑證匯出")

3\. 憑證有許多種格式，你隨便選一種即可。假設我們選取 **DER 編碼二位元 X.509 (.CER)** 格式，然後設定匯出的檔名，你可以匯出到任何目錄下，假設我們將憑證匯出到 **C:\\TWGovRoot.cer**

![憑證有許多種格式，你隨便選一種即可，假設我們選取 DER 編碼二位元 X.509 (.CER) 格式](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1f862b933633e2952a28-image_12.png "憑證有許多種格式，你隨便選一種即可，假設我們選取 DER 編碼二位元 X.509 (.CER) 格式")

![設定匯出的檔名，你可以匯出到任何地方，假設我們將憑證匯出到 C:\\TWGovRoot.cer](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1005ca40e39a9531cfe2-image_15.png "設定匯出的檔名，你可以匯出到任何地方，假設我們將憑證匯出到 C:\TWGovRoot.cer")

4\. 然後再匯出「政府憑證管理中心」的憑證，照著步驟 1 ~ 3 再做一遍

5\. 最後我們就要將剛剛匯出的**兩張憑證**一個個匯入到「信任的根憑證授權」的憑證儲存區中

![將剛剛匯出的兩張憑證一個個匯入到「信任的根憑證授權」的憑證儲存區中](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b7fa2c523edb032ae0ce-image_18.png "將剛剛匯出的兩張憑證一個個匯入到「信任的根憑證授權」的憑證儲存區中")

![將剛剛匯出的兩張憑證一個個匯入到「信任的根憑證授權」的憑證儲存區中](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3dbffa5c57db796def9e-image_21.png "將剛剛匯出的兩張憑證一個個匯入到「信任的根憑證授權」的憑證儲存區中")

匯入完成之後程式終於可以正常運作了！
