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

时间:2018-12-10 11:53:50

标签: php apache authentication ssl soap

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

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

我已经尝试了多种方法来解决它,但我故意不在此处介绍它们,以便不提出任何建议,这在设计上可能是错误的。

Internet正在使我不知所措,这充满了关于如何生成SSL证书或如何使客户端使用SSL证书进行身份验证的教程,而这次并非如此。

有什么好人会帮助我吗?

1 个答案:

答案 0 :(得分:0)

我谈到了可以打电话给解决方案的地方,所以我将其发布在这里。

成功涉及以下因素:

  1. 关键:确保为某些虚拟主机(或全局)启用select (@rn := @rn + 1) as seqnum, s_id, group_concat(p_id order by time) as p_ids from t cross join (select @rn := 0) params group by s_id; -令人惊讶地评论到(Debian Jessie)。
  2. 用于客户端身份验证的证书是由官方(众所周知的和公共的)CA签名的,因此无需将自签名的CA添加到服务器的OpenSSL环境中。在其他情况下,提到的very well written tutorial将有助于安装自定义CA并生成相关的客户端证书。 谢谢@YvesLeBorg。
  3. 对于最终的身份验证条件,我使用了SSLCACertificatePath /etc/ssl/certs

    .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> 请求可以工作,但是在某些环境中 SoapUI仍然无法授权,我不知道为什么。

但是在这一点上,我认为问题已在很大程度上得到解决。