【问题标题】:Is it possible to use client certificates in Windows Azure Websites是否可以在 Windows Azure 网站中使用客户端证书
【发布时间】:2015-02-17 22:56:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: azure ssl ssl-certificate azure-web-app-service client-certificates


    【解决方案1】:

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

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

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

    【讨论】:

    • 设置 clientCertEnabled 不会导致服务器发送“certificateRequested”并要求客户端证书。
    【解决方案2】:

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

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

    【讨论】:

    • 我在研究中遇到了这个问题,并尝试按照他们的描述进行操作。我的理解是,这就是人们如何存储证书以供从网站内的代码中使用。它不允许网站接受客户端证书。
    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2021-02-02
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多