我使用了有效证书,但无法获取客户端证书。lighttpd 服务失败并显示以下错误:
(connections-glue.c.200)SSL:1 错误:140890C7:SSL 例程:SSL3_GET_CLIENT_CERTIFICATE:对等方未返回证书
我的配置是这样的:
$SERVER["socket"] == ":443" {
protocol = "https://"
ssl.engine = "enable"
ssl.disable-client-renegotiation = "enable"
#server.name = "mywebsite.com"
ssl.pemfile = "/etc/lighttpd/ssl/mywebsite.com.pem"
ssl.ca-file = "/etc/lighttpd/ssl/mywebsite.com.csr"
ssl.ec-curve = "secp384r1"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
ssl.honor-cipher-order = "enable"
ssl.cipher-list = "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"
# HSTS(15768000 seconds = 6 months)
#setenv.add-response-header = (
# "Strict-Transport-Security" => "max-age=15768000;"
#)
#ask for client cert
ssl.verifyclient.exportcert = "enable"
ssl.verifyclient.activate = "enable"
ssl.verifyclient.username = "SSL_CLIENT_S_DN_CN"
ssl.verifyclient.enforce = "enable"
ssl.verifyclient.depth = 3
}
}
答案1
ssl.ca 文件读取内容,您可以在此处调用任何文件类型,即使是 .txt,对于 lighttpd 来说,内容是证书还是证书链都无关紧要。
当你启用 ssl.verifyclient.activate 时,lighttpd 将请求由 ca-file 内的根 CA 证书签名的证书。
如果我想使用第三方证书,例如 ICP-Brazil,它是所有个人证书的根。此证书由该实体签名,证明您确实是您,并且在您的法庭上具有法律效力。ICP-Brazil 目前有 5 个版本的根证书,因此如果系统应该支持旧证书(有效期可能长达 6 年),则意味着您需要在 ssl.ca 文件中放置多个证书。如下所述:https://schnouki.net/posts/2014/08/12/lighttpd-and-ssl-client-certificates/
关于错误:
(connections.c.305)SSL:1 错误:140890C7:SSL 例程:SSL3_GET_CLIENT_CERTIFICATE:对等方未返回证书
发生这种情况的原因如下:
- 客户端没有任何有效证书(与 ssl.CA 文件中的根证书匹配)
- 连接在 SSL 握手完成之前中断。这可能是由于选择证书或输入证书密码的时间过长,甚至是网络重启造成的。
- 您正在使用 CDN 网络(例如 cloudflare 或 ovh cdn),客户端和服务器之间的连接应该是直接的才能进行握手。
所以我得出结论,这不是一个真正需要纠正的错误,而是 ssl 握手技术的局限性。