Apache中的客户端认证机制

因为对HTTPS通信和客户端认证秘钥、公钥和证书的区别不太理解,所以我进行了一些调查。这只是我个人的备忘录,可能有些难以理解,敬请谅解。

客户认证的机制 de

大意

客户端进行https连接到服务器
服务器向客户端请求客户端证书
客户端将客户端证书发送到服务器
此时,用户选择客户端证书
服务器解密已签名的客户端证书并获取客户端的公钥
客户端在发送的消息中附加摘要并使用自己持有的私钥进行加密
服务器使用客户端的公钥解密消息
从解密后的消息中创建消息摘要并与客户端添加的消息摘要进行比较
如果匹配确认,则表示接收到未被篡改的消息来自可信任的客户端

※要点
HTTPS的SSL通信采用了秘钥加密方式,而客户端认证则采用了公钥加密方式。需要注意的是,秘钥和公钥扮演了不同的角色。
有关加密方式的差异,请参考http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/kagi.htm。

服务器如何对客户端进行认证?

服务器不能认证所有只有客户端证书(例如,只有访问其他服务器的客户端证书)的客户端。服务器需要根据特定条件对每个客户端进行验证和认证。

可以通过SSLVerifyDepth、SSLCACertificateFile来设置验证条件。

SSL验证深度

在mod_ssl决定客户端是否具有有效证书之前,可以设置需要进行多深的验证。默认值为1。

深度是验证客户端证书所需的CA证书的最大数量。如果深度为0,则仅允许自签名的客户端证书。如果深度为1,则允许自签名的客户端证书或由SSLCA证书文件指令指定的证书所签名的客户端证书。

来源:http://www.nina.jp/server/slackware/httpd/ssl.conf.html

SSLCACertificateFile 网站证书文件

指定CA证书文件,由发行客户端证书的CA创建。用于客户端认证。若要使用由多个CA发行的客户端证书,则应使用SSLCACertificatePath指令。

来源:http://www.nina.jp/server/slackware/httpd/ssl.conf.html

其他指令

    • SSLCARevocationFile

 

    • クライアント証明書を発行した CA の、失効証明書リストファイルを指定する。 破棄されたクライアント認証を確認するために使用される。

 

    • SSLVerifyClient

 

    クライアント認証のレベルを設定する。requireを指定すれば、クライアント認証が必須となる。