设置 Apache 相互身份验证

设置 Apache 相互身份验证

我被要求设置一个 Apache Web 服务器以使用相互身份验证,以保护对特定文件夹/文件的访问。

仅当客户端发送受信任的自签名客户端证书时,才应授予对此特定文件/文件夹的访问权限。

在网络服务器上,我已经使用受信任的 CA 签名的有效证书设置了 HTTPS(这是简单的部分)

我从来没有做过这样的事情,我不知道从哪里开始以及如何检查它是否有效。

我也不知道客户端应该向我发送哪些文件来开始设置:我想他们应该发送客户端证书以及用于签署证书的 CA,这是最好的方法吗?

你能帮我设置吗?

答案1

您可以查看有关此主题的多个在线教程中的任何一个。

基本上,您可以正常激活 TLS,然后添加需要客户端证书的授权规则:

SSLVerifyClient require

这将导致访问失败并且浏览器要求客户在可用证书中进行选择,必须已安装在客户端操作系统或浏览器中。一旦所选的证书加载到客户端,它将自动发送到服务器。

现在,添加SSLOptions +StdEnvVars还将告诉 Apache 从证书中提取信息,这将允许您区分用户。

现在,您在环境中拥有了宝贵的信息,并且可以使用它在应用程序或 Apache 中进一步进行身份验证。

您想要的环境变量可能是SSL_CLIENT_S_<something>.SSL_CLIENT_S_DN_CN是客户端证书中的通用名称。然后,您可以根据需要限制客户端的参数:

SSLRequireSSL
SSLOptions  +StdEnvVars +ExportCertData +OptRenegotiate +FakeBasicAuth
SSLVerifyClient   require
SSLRequire %{SSL_CLIENT_I_DN_CN} eq "Issuer DN's Common Name"
       and %{SSL_CLIENT_S_DN_O}  eq "Subject DN's Organisation"
       and %{SSL_CLIENT_S_DN_CN} eq "Leonardo Serni"

请注意,正如 @UlrichSchwarz 正确指出的那样,您应该执行认证机构。否则任何人都可以自签名一份证书,说明任何事物,而你却一无所知。

所以你应该创建一个自己的CA,并使用生成签名证书,然后将其分发给您的客户。

更新: 这变量与(I)发行人相关,而S与(S)主体相关,即进行身份验证的主体(即您的客户端)。您可以在 的文档中找到完整的列表及其含义mod_ssl

相关内容