我正在编写一个用于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
我确定我在某个地方错过了一步,但对于我的生活,我无法弄清楚它是什么。在互联网上的任何帮助将不胜感激。