首页 文章

如何使用Apache进行客户端证书身份验证

提问于
浏览
14

问题非常明确,但我没有在网上找到任何有用的教程 . 所以我希望我能在这里运气好 .

基本上,我想用Apache构建客户端证书身份验证 . 我为我托管的网站配置了Apache的conf文件 . 我提出的问题在这里:

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/apache2/ssl/client.crt

但是我不知道如何为客户端生成证书和密钥文件 . 另外,我应该在Apache服务器配置中的SSLCACertificateFile上放置什么文件?

服务器是否只是将客户端发送的证书文件与服务器上的证书文件进行比较?客户端证书身份验证究竟在做什么?

2 回答

  • 14

    您可以在此处找到有关如何创建由此CA证书签名的CA证书和证书的说明:http://pages.cs.wisc.edu/~zmiller/ca-howto/

    事情是这样的:

    • 您设置了根CA密钥和证书

    • 客户端生成他的私钥和证书请求

    • 他们向您发送证书申请

    • 您使用证书请求,根CA证书和根CA密钥生成证书

    • 您将证书返回给客户端

    然后,您可以检查客户端是否提供了CA“签名”的证书 .

  • 3

    了解SSLVerifyClient和其他指令非常重要 . 从Practical Issues with TLS Client Certificate Authentication(第3页):

    SSLVerifyClient的默认值不需要CCA;因此,服务器不会在TLS握手中包含CertificateRequest消息 . 值require将需要CCA,因此CertificateRequest消息将包含在握手中 . 如果客户端未在客户端的证书消息中提供任何证书,或者mod_ssl未能验证提供的证书,则TLS握手将被中止,并且将向客户端发送致命的TLS警报消息 . 可选值与require相同,但可以容忍空客户端的Certificate消息 . 最后一个可能的值optional_no_ca与optional是相同的,但是它还允许提交一个客户端的证书,该证书不会链接到服务器信任的CA(因为OpenSSL [6]中的错误尚未生效或过期非 - 也将接受自签名的客户证书) . 值optional_no_ca可用于在应用程序级别执行证书验证,或实现使用X.509证书作为公钥传输的无PKI公钥验证 .

相关问题