匯入和匯出受保護的組態 RSA 金鑰容器

更新:2007 年 11 月

使用 RsaProtectedConfigurationProvider 時,「受保護的組態」會提供建立、刪除、匯出和匯入 RSA 金鑰容器的功能。Web 伺服陣列有一個十分有用的案例,因為相同的加密 Web.config 檔將會被部署至數個伺服器內。在那種情況下,也必須將相同的 RSA 金鑰容器部署至那些伺服器。若要完成這個工作,可建立應用程式的 RSA 金鑰容器、將其匯出至 XML 檔,並將它匯入至需要對已加密 Web.config 檔進行解密的每個伺服器中。

在主控多個 ASP.NET 應用程式的單一 Web 伺服器上,建立 RSA 金鑰容器也十分有用。藉由為每個應用程式或單一客戶的各組應用程式建立 RSA 金鑰容器,就可以改進應用程式敏感組態資訊的安全性,因為這樣一來應用程式的 Web.config 檔就無法以另一個應用程式的 RSA 金鑰容器進行解密。

建立 RSA 金鑰容器

若要建立 RSA 金鑰容器,請搭配使用 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe) 與 –pc 參數。您必須為這個金鑰容器命名,這個名稱會識別應用程式 Web.config 檔之 configProtectedData 區段中指定之 RsaProtectedConfigurationProvider 所使用的金鑰容器。若要確定可匯出剛剛所建立的 RSA 金鑰容器,則必須包含 -exp 選項。

例如,下列命令會建立名為 SampleKeys 的 RSA 金鑰容器,其為可匯出的電腦層級金鑰容器。

aspnet_regiis -pc "SampleKeys"–exp

下列範例示範 Web.config 檔案的 configProtectedData 區段。這個區段會指定 RsaProtectedConfigurationProvider,它會使用名為 SampleKeys 的電腦層級 RSA 金鑰容器。

<configProtectedData>
   <providers>
      <add name="SampleProvider" 
           type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                 Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                 processorArchitecture=MSIL"
           keyContainerName="SampleKeys" 
           useMachineContainer="true" />
   </providers>
</configProtectedData>
注意事項:

如果未安裝 .NET Framework,則無法刪除 RSA 金鑰容器,以防在無意中刪除受保護的組態區段之加密和解密金鑰。

授與 RSA 金鑰容器的存取權限

根據預設,RSA 金鑰容器會受到其安裝所在之伺服器上的 NTFS 存取控制清單 (ACL) 嚴密保護。這可透過限制加密金鑰的存取權,改善已加密資訊的安全性。

ASP.NET 可使用 RSA 金鑰容器之前,必須授權 ASP.NET 應用程式的處理序識別,使其具有該 RSA 金鑰容器的讀取權。如需設定和決定 ASP.NET 應用程式之識別的詳細資訊,請參閱 ASP.NET 模擬

您可以搭配使用 Aspnet_regiis.exe 工具與 -pa 參數,以提供 ASP.NET 應用程式之識別讀取 RSA 金鑰容器的使用權限。例如,下列命令會授與 Windows Server 2003 NETWORK SERVICE 帳戶存取權,以讀取名為 SampleKeys 的電腦層級 RSA 金鑰容器:

aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
注意事項:

如果 RSA 金鑰容器是使用者層級容器,則登入的身分必須是儲存該金鑰之 Windows 設定檔的使用者,且必須併入 -pku 選項,用以授與使用者層級 RSA 金鑰容器的存取權。如需詳細資訊,請參閱了解電腦層級和使用者層級的 RSA 金鑰容器

若要使用電腦組態中所指定的預設 RsaProtectedConfigurationProvider,則必須先將電腦金鑰容器 (名為 NetFrameworkConfigurationKey) 的存取權授與應用程式的 Windows 識別,這個金鑰容器就是指定給預設提供者 (Provider) 的金鑰容器。例如,下列命令會將預設 RsaProtectedConfigurationProvider 所使用的 RSA 金鑰容器存取權授與 NETWORK SERVICE 帳戶:

aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

NetFrameworkConfigurationKey RSA 金鑰容器是 Aspnet_regiis.exe 工具所發出之命令的預設金鑰容器。因此,也會發出之前的命令,如下所示:

aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"

匯出 RSA 金鑰容器

若要將 RSA 金鑰容器匯出至 XML 檔,則可搭配使用 Aspnet_regiis.exe 工具與 –px 參數。您可以使用 XML 檔做為 RSA 金鑰容器的備份,或是在不同的伺服器上匯入 RSA 金鑰容器。需要有 RSA 金鑰容器的私密金鑰部分,才可解密已加密的資訊。若要在另一部伺服器上利用匯出的金鑰容器,則也需要匯入私密金鑰。匯出金鑰時,指定 –pri 選項,即可將私密金鑰併入 XML 檔中。您還必須指定匯出的金鑰容器是電腦層級還是使用者層級。若要匯出使用者層級的金鑰容器,必須以其 Windows 設定檔中儲存該金鑰的使用者身分登入。若要指定使用者層級的金鑰,請在匯出加密金鑰資訊時併入 -pku 選項,否則匯出的金鑰將源自電腦金鑰存放區。如需電腦層級和使用者層級之加密金鑰的詳細資訊,請參閱了解電腦層級和使用者層級的 RSA 金鑰容器

例如,下列命令會將名為 SampleKeys 的電腦層級 RSA 金鑰容器匯出至名為 keys.xml 的檔案,且包含私密金鑰資訊。

aspnet_regiis -px "SampleKeys" keys.xml -pri
注意事項:

基於安全性,將 RSA 金鑰容器匯出至 XML 檔後,請將 XML 檔複製到伺服器外部的位置中,並從伺服器中刪除 XML 檔。這會減少攻擊者取得 RSA 金鑰容器存取權,因而解密透過該 RSA 金鑰容器所加密之 Web.config 檔的機會。

匯入 RSA 金鑰容器

您可以搭配使用 Aspnet_regiis.exe 工具與 –pi 參數,匯入 XML 檔的 RSA 金鑰容器。也必須指定匯入的金鑰容器是電腦層級或使用者層級的金鑰容器。若要匯入使用者層級的金鑰容器,您必須以其 Windows 設定檔中儲存該金鑰的使用者身分登入。若要指定使用者層級金鑰,請在匯入加密金鑰資訊時併入 -pku 選項,否則會將匯出的金鑰匯入至電腦金鑰存放區。

例如,下列命令會從名為 keys.xml 的檔案中匯入名為 SampleKeys 的電腦層級 RSA 金鑰容器:

aspnet_regiis -pi "SampleKeys" keys.xml

必須授與會使用所匯入 RSA 金鑰容器之 ASP.NET 應用程式的識別授權,以讀取 RSA 金鑰容器的內容。如需詳細資訊,請參閱本主題稍早的授與 RSA 金鑰容器的存取權限

刪除 RSA 金鑰容器

若要刪除 RSA 金鑰容器,則可搭配使用 Aspnet_regiis.exe 工具與 –pz 參數。刪除 RSA 金鑰容器之前,請確保已將金鑰匯出至 XML 檔以便稍後匯入,或確保沒有用 RSA 金鑰容器加密過的資訊將會需要解密。

刪除 RSA 金鑰容器時,您必須指定金鑰容器的名稱,並識別容器是電腦層級還是使用者層級。若要刪除使用者層級的金鑰容器,則必須以其 Windows 設定檔中儲存該金鑰的使用者身分登入。

例如,下列命令會刪除名為 SampleKeys 的電腦層級 RSA 金鑰容器。

aspnet_regiis -pz "SampleKeys"

請參閱

工作

逐步解說:建立和匯出 RSA 金鑰容器

其他資源

使用受保護的組態加密組態資訊