php - Apache - 仅允许具有某些 SSL 证书的客户端访问 (POST) 某些端点

标签 php apache authentication ssl soap

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

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

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

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

有好心人可以帮助我吗?

最佳答案

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

成功涉及以下因素:

  1. 至关重要:确保为某些虚拟主机(或全局)启用 SSLCACertificatePath/etc/ssl/certs - 令人惊讶的是(Debian Jessie)对此进行了评论。
  2. 用于客户端身份验证的证书由官方(众所周知的公共(public))CA 签名,因此无需将自签名 CA 添加到服务器的 OpenSSL 环境中。在其他情况下,提到的 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 仍然无法授权,我不知道为什么......

但此时我认为问题已大部分得到解决。

关于php - Apache - 仅允许具有某些 SSL 证书的客户端访问 (POST) 某些端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53705153/

相关文章:

apache - 无法从 apache php 访问 solr XML url

ruby-on-rails-3 - 如何使 Rails 3 作为移动应用程序的后端并支持请求中的 session_id?

azure - Azure Easy Tables 上的内部授权

PhpStorm 代码检查器 : "Method not found" in Route File of Laravel 5. 3

java - Apache HttpClient API 中的 CloseableHttpClient 和 HttpClient 有什么区别?

php - 用静态变量调用可变函数

php - 通过 SSL 的网络套接字

c# - 使用自签名证书的证书身份验证

php - 使用 Intellij PHP 远程解释器 + vagrant 找不到 VBoxManage

php - 在 Woocommerce 中获取产品名称