我有一个用 PHP 编写的应用程序,可以使用 PHP-FPM 和 Apache 堆栈进行访问。
我希望此应用程序的单个端点(例如 POST/create
,它是一个 SOAP 服务)只能由提供有效且受信任的 SSL 证书的客户端请求访问。我所说的“可信”是指指向单个(或多个)证书,而不仅仅是“有效的证书,因为它的 CA 是有效的”。
我已经尝试了多种方法来解决这个问题,但我故意不在这里展示它们,以免提出任何建议,这可能是设计上的错误。
互联网给我带来了一堆关于如何生成 SSL 证书或如何让客户端使用 SSL 证书进行身份验证的教程的垃圾,但这次不是这样。
有好心人可以帮助我吗?
最佳答案
我到达了某个点,我可以调用解决方案,所以我将其发布在这里。
成功涉及以下因素:
- 至关重要:确保为某些虚拟主机(或全局)启用
SSLCACertificatePath/etc/ssl/certs
- 令人惊讶的是(Debian Jessie)对此进行了评论。 - 用于客户端身份验证的证书由官方(众所周知的公共(public))CA 签名,因此无需将自签名 CA 添加到服务器的 OpenSSL 环境中。在其他情况下,提到的 very well written tutorial 将有助于安装自定义 CA 并生成相关的客户端证书。 谢谢@YvesLeBorg。
对于最终的身份验证条件,我使用了
.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/