问题非常明确,但我没有在网上找到任何有用的教程。所以我希望我能在这里运气好。
基本上,我想用Apache构建客户端证书身份验证。我为我托管的网站配置了Apache的conf文件。我提出的问题在这里:
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/apache2/ssl/client.crt
但是我不知道如何为客户端生成证书和密钥文件。另外,我应该在Apache服务器配置中将哪个文件放在SSLCACertificateFile上?
服务器是否只是将客户端发送的证书文件与服务器上的证书文件进行比较?客户端证书身份验证究竟在做什么?
答案 0 :(得分:14)
您可以在此处找到有关如何创建由此CA证书签名的CA证书和证书的说明: http://pages.cs.wisc.edu/~zmiller/ca-howto/
事情是这样的:
然后,您可以检查客户端是否提供了CA“签名”的证书。
答案 1 :(得分:3)
了解SSLVerifyClient和其他指令非常重要。 来自Practical Issues with TLS Client Certificate Authentication(第3页):
SSLVerifyClient的默认值 none 可以 不要求CCA;因此服务器不会包含 TLS握手中的CertificateRequest消息。
值 require 将需要CCA,因此需要CCA CertificateRequest消息将包含在 握手。如果客户没有提供任何证书 客户端的证书消息或mod_ssl失败 验证提供的证书,TLS握手将是 中止和致命的TLS警报消息将被发送到 客户端。
值可选与 require 相同,但是 将容忍空客户端的证书消息。
最后一个可能的值 optional_no_ca 与...相同 可选,但另外它允许客户的证书 提交时不会链接到服务器信任的CA. (因为OpenSSL [6]中的错误尚未生效或过期 也将接受非自签名客户证书。
在 值 optional_no_ca 可用于执行证书 在应用程序级别进行验证或实施PKI 使用X.509证书的公钥验证 公钥运输。