需要一种向后的方式来识别我正在检查的证书

时间:2015-01-26 20:33:04

标签: c# encryption

我是使用C#ASP的新项目。代码中的一部分通过电子邮件模板上的一些短代码处理来加密要在电子邮件中发送的URL链接中的哈希码。我们使用的加密是带有CryptographyManager类的对称Rijndael。这是在我(或团队中的任何其他人)任职之前很久就实现的,因此我们不知道最初是如何设置的(即证书名称是什么)。所以最终发生的事情是我们的代码在test / UAT / production服务器和我们的夜间进程服务器上运行良好,但每当我们在自己的机器上调试这些代码时,我们都会收到此错误:

  

Microsoft.Practices.ServiceLocation.ActivationException:激活   尝试获取类型实例时发生错误   CryptographyManager,key"" --->   Microsoft.Practices.Unity.ResolutionFailedException:解析   依赖失败,type =   " Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.CryptographyManager&#34 ;,   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,我想我需要找到证书名称。

1 个答案:

答案 0 :(得分:0)

所以我问的是错误的问题。没有办法以反向方式获取该证书名称(据我所知)。我确实找到了证书,但它不在我的任何真正的证书商店中。

我登录到服务器并启动了IIS管理器(6.0)。在机器下 - &gt;网站 - &gt;默认网站(或任何网站名称),右键单击属性 - &gt;目录设置 - &gt;在“安全通信”部分下,您可以查看证书,或通过“服务器证书”按钮修改/复制证书。

在我的奇怪案例中,证书是定制的(我们有一个管理这些证书的部门),证书路径是通过中间证书发布的。