我是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文件夹权限,因此忘记了确切的路径,最终破坏了系统
答案 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));