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

时间:2014-07-03 01:21:51

标签: apache authentication ssl certificate

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

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

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

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

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

2 个答案:

答案 0 :(得分:14)

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

事情是这样的:

  • 您设置了根CA密钥和证书
  • 客户端生成他的私钥和证书请求
  • 他们向您发送证书申请
  • 使用证书请求,根CA证书和根CA密钥生成证书
  • 您将证书返回给客户

然后,您可以检查客户端是否提供了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证书的公钥验证   公钥运输。