是否可以在 Windows Azure 网站中使用客户端证书

Is it possible to use client certificates in Windows Azure Websites

我正在开发一个 windows 服务应用程序,它将 运行 客户 PC/servers 并访问托管在 Azure 网站中的 Web API 端点。它需要对用户进行身份验证,我不希望将凭据存储在客户的机器上。所以,我已经登陆客户端证书来验证用户。我使用自签名证书对本地非 Azure 网站 IIS 实例进行此操作。但是,我无法让它在 Azure 网站上运行。

据我所知,有两个问题我没有找到太多相关文档:

对于问题 2,这里有一篇关于如何在 Azure 网站上安装客户端证书的博客post:http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/

对于问题 1,您不能将自己的 CA 证书安装为受信任的根证书,但如果您拥有来自已受信任的 CA 的证书,那么您可以毫无问题地使用它们。

对于 Azure 网站与 Web 角色,客户端身份验证选项相当有限。网站不允许您 运行 具有提升权限的程序,这是进行 IIS 更改和将证书存储到受信任的根中所必需的。

有一种方法可以将您的网站配置为始终(您无法像 IIS 'Accept' 配置那样将其设为可选的好处)请求客户端证书。此功能目前只能通过 Azure 管理 REST API 使用,您无法通过门户 UI 访问它。您可以找到更多信息 here。 本质上,您将 clientCertEnabled 网站设置打开为 true。此选项的机制不同于传统的客户端身份验证,在传统客户端身份验证中,服务器需要具有 CA 证书,客户端证书使用该证书在其受信任的根中进行签名。服务器不 运行 对客户端证书进行任何验证,应用程序需要 运行 证书检查自身,它来自请求 header "X-ARR-ClientCert"。 HttpRequestMessage 上的 GetClientCertificate() 扩展方法将自动解析它。

或者,您可以将 Web API 托管为 Web 角色。这允许访问具有更高权限的 运行ning 启动任务,允许访问受信任的根并进行 IIS 配置,更多 details/examples here。您可以将 CA 证书复制到应用程序文件夹或通过 Azure 门户上传到用户存储,以便它可用于在启动任务中复制到受信任的根目录。 IIS 更改可以通过“Microsoft.Web.Administration”库进行,通过 ServerManager class 作为 NuGet 包提供。