【问题标题】:Apache - allow only clients with certain SSL certificates to access (POST) certain endpointApache - 仅允许具有特定 SSL 证书的客户端访问(POST)特定端点
【发布时间】:2018-12-10 11:53:49
【问题描述】:

我有一个用 PHP 编写的应用程序,可以使用 PHP-FPM 和 Apache 堆栈访问。

我希望这个应用程序的单个端点(比如POST /create,它是一个 SOAP 服务)只能被提供有效且受信任的 SSL 证书的客户端的请求访问。 “受信任”是指指向单个(或多个)证书,而不仅仅是“有效的证书,因为它的 CA 是有效的”。

我已经尝试了很多方法来解决它,但我故意不在这里展示它们是为了不提出任何建议,这可能只是设计上的错误。

互联网向我返回了一堆关于如何生成 SSL 证书或如何让客户端使用 SSL 证书进行身份验证的教程,但这次不是这样。

有没有好人可以帮助我?

【问题讨论】:

  • 从文本中不确定,但我认为您的意思是“使用 apache 的客户端 SSL 身份验证”。如果是这样,您可以阅读 this 来开始您的探索。
  • 看起来很有希望,谢谢。是的,我的意思是“使用 Apache 的客户端 SSL 身份验证”。

标签: php apache authentication ssl soap


【解决方案1】:

我想到了某个点,我可以调用解决方案,所以我在这里发布。

成功的因素有以下几点:

  1. 至关重要:确保为某些虚拟主机(或全局)启用了 SSLCACertificatePath /etc/ssl/certs - 令人惊讶的评论(Debian Jessie)。
  2. 用于客户端身份验证的证书是由官方(众所周知和公共)CA 签署的,因此无需在服务器的 OpenSSL 环境中添加自签名 CA。在其他情况下,提到的very well written tutorial 将有助于安装自定义 CA 并生成相关的客户端证书。 谢谢@YvesLeBorg。
  3. 对于我使用.htaccess的最终认证条件:

    <IfModule mod_ssl.c>
        <If "%{REQUEST_URI} == '/create' && %{REQUEST_METHOD} == 'POST'">
            SSLVerifyClient require
            Require expr %{SSL_CLIENT_M_SERIAL} eq '1234567890ABCDEF123456789ABCDEF1'
            SSLVerifyDepth 2
        </If>
    </IfModule>
    

    如您所见,对某个证书进行了验证 使用它的序列号(我仍然不确定这是否是最好的 验证唯一证书的方法)。

这些步骤使curl 请求有效,但在某些环境中 SoapUI 仍然无法授权,我不知道为什么...

但在这一点上,我认为问题已在主要部分得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2012-11-03
    • 2014-07-24
    • 2018-05-28
    • 2013-06-20
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多