我在 AlmaLinux 8.8 (Centos) 和 Apache 2.4.56 中运行一个站点。该站点有一个自签名证书。
当我访问该网站时,由于自签名证书,我收到了常见的警告。在接受我想继续后,我SSL_ERROR_HANDSHAKE_FAILURE_ALERT
在 Firefox 和ERR_BAD_SSL_CLIENT_AUTH_CERT
Chrome 中收到了错误。
在同一台服务器上,其他网站可以正常使用 Cloudflare + Let'Encrypt。
我对 Apache 虚拟主机文件上的 SSL 配置没有任何怀疑。我也仔细检查了证书。
我运行了这个调试工具,openssl s_client -state -debug -showcerts -verify 1 -connect example.com:443
下面您可以找到输出的摘要。
我注意到这一行SSL3 alert read:fatal:handshake failure
以及另一行提及 Cloudflare 的内容,尽管该网站目前并未使用 Cloudflare。
请帮忙。
调试工具的输出:
verify depth is 1
CONNECTED(00000005)
SSL_connect:before SSL initialization
...
SSL_connect:SSLv3/TLS write client hello
...
SSL_connect:SSLv3/TLS write client hello
...
SSL_connect:SSLv3/TLS read server hello
depth=0 C = XX, L = Default City, O = Default Company Ltd, CN = (...)
verify error:num=18:self-signed certificate
...
SSL_connect:SSLv3/TLS read server certificate
... ...
SSL_connect:SSLv3/TLS read server key exchange
SSL_connect:SSLv3/TLS read server certificate request
SSL_connect:SSLv3/TLS read server done
SSL_connect:SSLv3/TLS write client certificate
SSL_connect:SSLv3/TLS write client key exchange
SSL_connect:SSLv3/TLS write change cipher spec
...
SSL_connect:SSLv3/TLS write finished
...
SSL3 alert read:fatal:handshake failure
SSL_connect:error in error
0036800901000000:error:0A000410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1586:SSL alert number 40
---
Certificate chain
0 s:C = XX, L = Default City, O = Default Company Ltd, CN = (...)
i:C = XX, L = Default City, O = Default Company Ltd, CN = (...)
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Jul 14 11:41:36 2023 GMT; NotAfter: Jul 11 11:41:36 2033 GMT
-----BEGIN CERTIFICATE-----
...
Acceptable client certificate CA names
C = US, O = "CloudFlare, Inc.", OU = Origin Pull, L = San Francisco, ST = California, CN = origin-pull.cloudflare.net
Client Certificate Types: RSA sign, DSA sign, ECDSA sign
Requested Signature Algorithms:
...
---
SSL handshake has read 1553 bytes and written 456 bytes
Verification error: self-signed certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID:
Session-ID-ctx:
Master-Key: 940A6E481407D70D9F5DCFF3DD0760DC10A3A6B4B6F37D602EE8CDB83A736B049DE24DF0C8D4DE57A9E3A403553EC6D6
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1689342131
Timeout : 7200 (sec)
Verify return code: 18 (self-signed certificate)
Extended master secret: no
答案1
根据我进行的研究,服务器和客户端上的几个设置可能会导致此错误。
在其他网站上禁用 Cloudflare 后,我发现即使这些网站上有签名证书,错误也会出现。所以问题出在一些全局 Apache 配置上。
我通过将此指令添加SSLVerifyClient none
到我的httpd.conf
文件中解决了该问题。
显然,服务器正在要求客户端提供证书以进行身份验证。尽管我没有SSLVerifyClient require
在任何 Apache 配置文件中找到该指令。一个谜 ;)。