是否可以将 Apache(或任何其他支持 SSL 的服务器)配置为仅接受来自预定义列表中的证书的客户端的连接?这些证书可以由任何 CA 签名(也可以是自签名的)。
不久前,我尝试在我工作的域名注册局的 EPP 系统中运行客户端证书验证。EPP 协议规范强制使用“相互强客户端-服务器身份验证”。实际上,这意味着客户端和服务器和服务器必须验证会话中对方的证书。
我们创建了一个私人证书颁发机构,并要求注册商提交 CSR,然后我们对其进行签名。这在我们看来是最简单的解决方案,但我们的许多注册商反对:他们习惯于从 CA 获取客户端证书,然后将该证书提交给注册中心。所以我们不得不放弃这个系统。我一直在尝试找到一种在我们的服务器中实现这个系统的方法,它基于mod_eppApache 的模块。
答案1
可能只需使用核心 mod_ssl 并使用 SSLRequire 即可完成。我不确定您想要的确切 SSL 变量,但类似下面的内容应该可以工作:
SSLRequire %{SSL_CLIENT_S_DN_UID} 在 {文件(“/tmp/list”) }
或者,您可以将某些证书属性映射到通常来自 HTTP 身份验证(.htaccess 类型限制)的用户名:
.htaccess 文件:
SSLOptions +FakeBasicAuth SSLUserName SSL_CLIENT_S_DN_CN AuthGroupFile /tmp/SSL_Groups 需要组 my-users
/tmp/SSL_组:
我的用户:uid = bob,dc = site,dc = com uid = jane,dc = site,dc = com
再说一遍,我不是 100% 确定 SSL_CLIENT_S_DN_CN 是什么样子,但你明白我的意思。