我有一个在Azure中运行的asmx服务(HTTP - 没有SSL)。
我有一个WPF应用程序加载X509Certificate2并通过执行以下操作将其添加到请求中:
X509Certificate2 cert = new X509Certificate2("...");
webRequest.ClientCertificates.Add(cert);
在网络服务中,我通过
获得证书new X509Certificate2(this.Context.Request.ClientCertificate.Certificate)
然后我使用以下示例加载一个证书(我已将其上传到Azure控制面板并添加到我的服务定义文件中):
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, certName, true);
然后我通过执行以下操作进行验证:
clientCert.Thumbprint == certs[0].Thumbprint
现在我很快就得到了一个异常( System.Security.Cryptography.CryptographicException:m_safeCertContext是一个无效句柄)
Request.ClientCertificate.Certificate
所以我有几个问题。我该如何避免异常。 This answer表示我需要修改IIS设置,但是如何在Azure中执行此操作?
在任何情况下,这甚至是进行证书身份验证的正确方法吗?
谢谢!
答案 0 :(得分:3)
您可以使用命令脚本修改IIS,并结合appcmd.exe
。
有关快速示例(禁用应用程序池中的超时),请查看Steve Marx的this sample。
在此示例中,您将调用DisableTimeout.cmd作为启动任务。有关创建启动任务的更多信息,您可以观看Cloud Cover Show的this episode。在Pl atform Training Kit中应该有启动任务的实验室。
请记住,任何类型的IIS配置更改都应该在启动时通过自动化任务进行。如果通过RDP手动更改IIS,则这些更改不会传播到所有实例,并且在硬件故障或操作系统更新时不会保持持久性。
答案 1 :(得分:0)
您可以远程访问您的azure实例来管理IIS。至于一次对所有实例进行全局处理的方法,我不确定。那将是一个有趣的侧面项目。
http://learn.iis.net/page.aspx/979/managing-iis-on-windows-azure-via-remote-desktop/