使用授权证书列表而不是证书颁发机构来验证 SSL 客户端

使用授权证书列表而不是证书颁发机构来验证 SSL 客户端

是否可以将 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 是什么样子,但你明白我的意思。

答案2

您应该能够设置一个包含您信任的所有 CA 证书的目录,然后使用SSLCA证书路径指令,这样您就可以基于任何证书进行身份验证。然后正如 Jeff 提到的那样,使用SSL要求限制对您想要允许的证书集的访问。

如果你的系统尚未安装一组通用 CA 证书,那么你可以从其他地方复制它们。Debian 的ca 证书包可能是一个很好的起点。

相关内容