繁体   English   中英

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

[英]IIS 10 Application permissions to access a Cert in Certificate Manager

我是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文件夹权限,因此不记得确切的路径了,这最终破坏了系统

所以我设法解决了。 事实证明,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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM