1

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

我有一个在 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 is an invalid handle

 Request.ClientCertificate.Certificate

所以我有几个问题。如何避免异常。这个答案指出我需要修改 IIS 设置,但我如何在 Azure 中做到这一点?

无论如何,这甚至是进行证书身份验证的正确方法吗?

谢谢!

4

2 回答 2

3

您可以使用命令脚本来修改 IIS,结合appcmd.exe.

对于一个简单的示例(禁用应用程序池中的超时),请查看 Steve Marx 的这个示例

在此示例中,您将调用 DisableTimeout.cmd 作为启动任务。有关创建启动任务的更多信息,您可以观看本集Cloud Cover Show。Pl atform Training Kit中也应该有一个关于启动任务的实验室。

请记住,任何类型的 IIS 配置更改都应在启动时通过自动任务进行。如果您通过 RDP 手动更改 IIS,这些更改不会传播到您的所有实例,并且在硬件故障或操作系统更新的情况下不会保持持久性。

于 2011-12-04T14:13:05.767 回答
0

您可以远程进入您的 Azure 实例来管理 IIS。至于一次为所有实例全局执行此操作的方法,我不确定。不过,那将是一个有趣的副项目。

http://learn.iis.net/page.aspx/979/managing-iis-on-windows-azure-via-remote-desktop/

于 2011-12-04T05:05:42.847 回答