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

时间:2015-02-17 22:56:01

标签: azure ssl ssl-certificate azure-web-sites client-certificates

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

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

  • 如何在网站实例的受信任根目录中安装自己的CA证书?或者这只适用于已经受信任的CA证书?
  • 如何为此应用启用“接受客户端证书”?在IIS中,您可以在“SSL设置”下执行此操作。文档表明修改app.config的system.webServer / security / access节点将完成此操作,但显然您无法在网站中执行此操作。网站文档建议解锁该节点以便在web.config中使用,但是添加该节点会导致错误“由于发生内部服务器错误,页面无法显示。”,即使自定义错误已关闭。

2 个答案:

答案 0 :(得分:4)

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

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

或者,您可以将Web API作为Web角色托管。这样就可以访问具有提升权限的运行启动任务,允许访问受信任的root并进行IIS配置,更多详细信息/示例here。您可以将CA证书复制到app文件夹,也可以通过Azure门户上载到用户存储,以便可以将其复制到启动任务中的受信任根目录。可以通过ServerManager类以NuGet包提供的“Microsoft.Web.Administration”库进行IIS更改。

答案 1 :(得分:1)

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

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