我是使用C#ASP的項目的新手。代碼中的一部分通過電子郵件模板上的一些簡碼處理來加密URL鏈接中的哈希碼,以便通過電子郵件發送。我們使用的加密是與CryptographyManager類對稱的Rijndael。這是在我(或任何其他團隊)任職期間很久以前實施的,所以我們不知道最初是如何設置的(即證書名稱是/是)。那麼最終發生的是我們的代碼運行測試/ UAT /生產服務器上很好,而我們的夜間處理過程服務器,但每當我們在我們自己的機器調試代碼,我們得到這個錯誤:需要一種倒退的方式來確定我正在檢查的證書
Microsoft.Practices.ServiceLocation.ActivationException: Activation error occured while trying to get instance of type CryptographyManager, key "" ---> Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.CryptographyManager", name = "(none)".
當然,我的想法是,我錯過了我的機器上的私鑰/證書存儲來完成這樣的任務。於是我查看了服務器上的certmgr,發現了370個證書,沒有明顯的名字與我們的項目捆綁在一起。喜悅。
於是我回到了代碼,看看,如果我能我的方式斷點,我們正在尋找的理解:
public static MyEmailViewModel GetEmailTemplateBody(string templateName, string MasterID)
{
MyEmailViewModel email = new MyEmailViewModel();
EmailShortCodeProvider emailShortCodeProvider = new EmailShortCodeProvider(new ParticipantRepository(),
new MyEncryptionProvider(EnterpriseLibraryContainer.Current.GetInstance<CryptographyManager>()));
...
而且我上面未能在最後一行。我主要懷疑的是,EnterpriseLibraryContainer試圖解決的任何CryptographyManager實例都缺少證書名稱和密鑰(如果我正在解釋該錯誤消息),但該對象不是空的......只是需要設置。
檢查web.config文件:
<securityCryptographyConfiguration defaultHashInstance="SHA1CryptoServiceProvider" defaultSymmetricCryptoInstance="RijndaelManagedServiceProvider">
<hashProviders>
<add name="SHA1CryptoServiceProvider" type="Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=5.0.414.0, Culture=neutral, PublicKeyToken="xxxxxxxxxxxxxx" algorithmType="System.Security.Cryptography.SHA1CryptoServiceProvider, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxx" saltEnabled="true" />
</hashProviders>
<symmetricCryptoProviders>
<add name="RijndaelManagedServiceProvider" type="Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.SymmetricAlgorithmProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=5.0.414.0, Culture=neutral, PublicKeyToken="xxxxxxxxxxxxxxx" algorithmType="System.Security.Cryptography.RijndaelManaged, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken="xxxxxxxxxxxxxxxx" protectedKeyFilename="C:\xxxxxxxx\xxxxxxxx.key" protectedKeyProtectionScope="LocalMachine" />
</symmetricCryptoProviders>
</securityCryptographyConfiguration>
我想我的麻煩就結束了,如果我能複製由protectedKeyFilename標籤指定的那把鑰匙,但沒有運氣。密鑰通常是特定於計算機的,並且要從服務器導出它們,大多數說明都需要使用certmgr進行導出,並且我需要證書名稱才能實現此目的。
我花了好幾天的時間仔細研究了這些信息,但沒有取得明顯的進展。有沒有人知道我如何以任何方式獲取證書名稱?我完全錯了,我不需要證書,只是一個非常好的鑰匙?我感到沮喪和不知所措,直到我不確定我是否提出正確的問題或提供正確的信息。任何幫助或指針,不勝感激。謝謝。
摘要:新加密,使用舊的Microsoft CryptographyManager,我想我需要找到證書名稱。