lighttpd 上出现“SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate”错误

lighttpd 上出现“SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate”错误

我使用了有效证书,但无法获取客户端证书。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 握手技术的局限性。

相关内容