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