我将客户端证书添加到ca.pem中,如
bind 0.0.0.0:443 ssl crt /etc/ssl/private/asdf.hdavid.io.pem verify optional ca-file /etc/ssl/certs/ca.pem
http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
然后用curl -v --key key.pem --cert cert.pem https://asdf.hdavid.io
调用
但是,在这两种情况下,当客户端呈现有效的证书时,以及当客户端呈现不属于haproxy信任的证书时,我得到了X-SSL客户端验证在后端为零。
实际上,它似乎是有效的,通过验证正确地阻止来自我在haproxy中信任的证书的请求。但当我核实可选的时候。我总是把ssl_c_verify作为零,为什么呢?
发布于 2021-06-28 17:17:24
但当我核实可选的时候。我总是把ssl_c_verify作为零,为什么呢?
来自哈代文献:
ssl_c_verify :整数在通过SSL/TLS传输层进行传入连接时返回验证结果错误ID,否则如果没有遇到错误,则为零。有关错误代码的详尽列表,请参阅SSL库的文档。
这个零基本上是X509_V_OK
,正如openssl验证中所记录的那样。
但是,在这两种情况下,当客户端呈现有效的证书时,以及当客户端呈现不属于haproxy信任的证书时,我得到了X-SSL客户端验证在后端为零。
当客户端显示不受信任的证书时,由于验证失败,连接将失败:
$ curl ... -cert wrong.pem ...
...
* OpenSSL SSL_read: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca, errno 0
但是当没有提供证书时,连接就会成功,因为客户端证书被认为是可选的。
但是,看起来您希望连接在错误的证书上实际成功,但是要向上游转发错误。如果首先使用了客户端证书,您还希望转发这些信息。在这种情况下,您可以使用如下内容:
bind 0.0.0.0:443 ssl ... verify optional crt-ignore-err all ...
http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
http-request set-header X-SSL-Client-Used %[ssl_c_used]
如果给出了客户端证书,则X-SSL-Client-Used
头将是1
。如果在证书验证期间没有发生错误,则X-SSL-Client-Verify
将为0
,这包括未授予证书的情况。否则,它将返回验证错误。
https://security.stackexchange.com/questions/251832
复制相似问题