需要一种向后的方法来识别我正在检查的证书
Need a backwards way to identify what certificate I am checking
我是使用 C# 的项目的新手 ASP。代码中的一部分对 URL link 中的哈希码进行加密,以便通过电子邮件模板上的一些简码处理在电子邮件中发送。我们使用的加密是带有 CryptographyManager class 的对称 Rijndael。这是在我(或团队中的任何其他人)在这里任职之前很久就实施的,所以我们不知道它最初是如何设置的(即证书名称 was/is 是什么)。所以最终发生的是我们的代码在 test/UAT/production 服务器和我们的夜间进程服务器上运行良好,但是每当我们在自己的机器上调试此代码时,我们都会收到此错误:
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)".
当然,我的想法是我的机器上缺少私有 key/certificate 存储来完成这样的任务。所以我查看了服务器上的 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,我想我需要找到证书名称。
所以我问错了问题。没有办法以向后的方式获得该证书名称(据我所知)。我确实找到了证书,但它不在我的任何真实证书存储中。
我登录到服务器并启动了 IIS 管理器 (6.0)。在机器下 -> 网站 -> 默认网站(或任何站点名称),右键单击属性 -> 目录设置 -> 在安全通信部分下,您可以查看证书,或 modify/copy 它通过 "Server Certificate" 按钮。
在我的奇怪案例中,证书是定制的(我们有管理这些的部门),并且证书路径是通过中间证书颁发的。
我是使用 C# 的项目的新手 ASP。代码中的一部分对 URL link 中的哈希码进行加密,以便通过电子邮件模板上的一些简码处理在电子邮件中发送。我们使用的加密是带有 CryptographyManager class 的对称 Rijndael。这是在我(或团队中的任何其他人)在这里任职之前很久就实施的,所以我们不知道它最初是如何设置的(即证书名称 was/is 是什么)。所以最终发生的是我们的代码在 test/UAT/production 服务器和我们的夜间进程服务器上运行良好,但是每当我们在自己的机器上调试此代码时,我们都会收到此错误:
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)".
当然,我的想法是我的机器上缺少私有 key/certificate 存储来完成这样的任务。所以我查看了服务器上的 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,我想我需要找到证书名称。
所以我问错了问题。没有办法以向后的方式获得该证书名称(据我所知)。我确实找到了证书,但它不在我的任何真实证书存储中。
我登录到服务器并启动了 IIS 管理器 (6.0)。在机器下 -> 网站 -> 默认网站(或任何站点名称),右键单击属性 -> 目录设置 -> 在安全通信部分下,您可以查看证书,或 modify/copy 它通过 "Server Certificate" 按钮。
在我的奇怪案例中,证书是定制的(我们有管理这些的部门),并且证书路径是通过中间证书颁发的。