我被要求设置一个 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
。