如何在Azure中设置接受客户端证书的asmx Web服务?

时间:2011-12-04 01:01:22

标签: web-services .net-4.0 azure certificate client-certificates

如果问题很荒谬,我会提前道歉。

我有一个在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中执行此操作?

在任何情况下,这甚至是进行证书身份验证的正确方法吗?

谢谢!

2 个答案:

答案 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/