使用特定密钥

时间:2017-04-05 13:36:42

标签: iis asp.net-core x509certificate data-protection

我正在编写一个用于IIS Web场的ASP.NET Core应用程序。为了支持防伪令牌和其他加密需求,我尝试使用服务器场中服务器共享的证书来加密加密。

我的证书已安装到本地计算机/个人存储中,证书路径不包含任何错误,并且私钥在安装时被标记为可导出,并且我将私钥的权限授予了应用程序池,iis_iusrs,网络服务,甚至是所有其他方式都失败的“所有人”(是的,我知道这很糟糕,我会在它工作后删除它!)

由于这是.NET Core而不是经典ASP.NET,而不是使用共享的MachineKey,我根据this article by Microsoft在Startup中的ConfigureServices()方法中配置了数据保护。但由于ProtectKeysWithCertificate()扩展方法不适用于.NET Core应用程序as mentioned in this article by MS,因此我使用了ProtectKeysWithDpapiNG()。我的代码如下所示:

services.AddDataProtection()
    .SetApplicationName("appName")
    .PersistKeysToFileSystem(new DirectoryInfo(@"\\computer\share$"))
    .ProtectKeysWithDpapiNG("CERTIFICATE=HashId:<thumbprint>",
        flags: DpapiNGProtectionDescriptorFlags.None);

此代码在我的工作站上运行时使用IISExpress并在我的计算机上安装了不同的证书。但是当在IIS中运行时,当我尝试打开标记为使用防伪标记的页面时,我收到以下错误:

System.Security.Cryptography.CryptographicException: Encryption failed

我确定我在某个地方错过了一步,但对于我的生活,我无法弄清楚它是什么。在互联网上的任何帮助将不胜感激。

0 个答案:

没有答案