IIS 10应用程序访问证书管理器中证书的权限

时间:2019-01-15 01:32:44

标签: c# iis x509certificate iis-10 wse

我是ASP和IIS菜鸟。我住在Linux终端中,所以这是一个陡峭的学习曲线...

我有一个用.Net 4.6编写的C#Web API。 Web API与第三个 参与者SOAP Web服务,它要求使用WSE 2.0标准的X509证书对SOAP请求进行签名。所有这些都可以在我的本地开发机器上正常工作。

我使用IIS 10和Windows Server 2016数据中心将应用程序部署到AWS Elastic Beanstalk Env。 Web API不适用于需要访问证书的任何功能。所有其他URL都可以正常工作。

我已将证书导入到本地计算机证书存储中。这是一个简单的案例,其中我没有配置正确的权限。

如何检查IIS是否有权访问所需的证书以及我需要添加什么用户来为IIS应用提供正确的访问权限。

我没有运气就做了以下事情:
 -在服务器上安装VS 2017,并成功运行控制台应用程序以测试WSE 2.0 dll是否是问题所在。很好  -在MMC中为证书的私钥添加了对IIS_IUSRS的读取访问权限
 -在MMC中为证书的私钥添加了对IUSER的读取访问权限
 -在MMC中为证书的私钥添加了对“ IIS APPPOOL \ DefaultAppPool”的读取访问权限
 -修改了Programs Data Crypto目录中的RSA文件夹权限,因此忘记了确切的路径,最终破坏了系统

1 个答案:

答案 0 :(得分:0)

所以我设法解决了这个问题。事实证明,WSE 2.0 X509CertificateStore不能通过IIS与Windows Server 2016 Cert Manager配合使用。我必须使用较新的System.Security.Cryptography.X509Certificates X509Store类来访问Cert,然后将X509Certificate2转换为MS Web Service2.X509Certificate。下面的代码:

X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection Certificate2Collection = store.Certificates;
X509Certificate2Collection results = 
    Certificate2Collection.Find(X509FindType.FindBySubjectName, (object)subject, false);
X509Certificate2 cert = results[0];
Microsoft.Web.Services2.Security.X509.X509Certificate cert = 
    new Microsoft.Web.Services2.Security.X509.X509Certificate(cert.Export(X509ContentType.Cert));