Cloudflare之前用的好好的,四五年未出问题,上个月某日起便出现ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误。
此网站无法提供安全连接www.qnfcp.xyz 使用了不受支持的协议。
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
错误表现
客户端表现:
- 页面显示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误
- 浏览器无法查看到证书
- curl测试访问显示:curl: (35) schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326) - This error usually occurs when a fatal SSL/TLS alert is received (e.g. handshake failed). More detail may be available in the Windows System event log.
Cloudflare面板表现:
- SSL/TLS-->边缘证书(Edge Certificates)中,不显示域名证书 或 显示过期的证书
问题分析
- 此问题的出现主要是Cloudflare未正确进行证书(续期)签发导致的。
- 由于需要使用CNAME接入方式使用cloudflare,因此曾使用Cloudflare Partner面板(下称CFP)。但使用的面板提供者已停止服务。
- Cloudflare升级业务后SSL/TLS新增收费功能“高级证书管理器(Advanced Certificate Manager)”。
- Cloudflare升级业务后SSL/TLS菜单下出现了新的功能“自定义主机名(Custom Hostnames)”。可能是因此功能间接影响了原CFP的自动证书签发。
问题解决
解决过程中需使用API增加一条域名解析用于默认回退源。如已有工具可忽略此处内容
API工具 CloudMare(安卓) 或 调用接口:Create DNS Record
需使用API Token页面中的API 令牌
- 使用API/API工具新增一条解析
a.domain.com
(供回退源使用) - 开启 SSL/TLS-->自定义主机名(初次填写需填写VISA/Mastercard等国际信用卡信息,前100条免费)
- 设置 自定义主机名-->回退源 为
a.domain.com
- 添加 自定义主机名-->添加自定义主机名
ssl.domain.com
(需使用HTTPS的域名) - 按需进行域名验证(验证可能需要几分钟)
- 等待证书签发。(边缘证书处不会新增,如开启了 证书透明度监视(SSL/TLS-->边缘证书-->证书透明度监视),将收到证书签发邮件)
- 自定义主机名处显示证书状态显示为
有效
此时网站应恢复正常。 - (如网站未正常)请检查Cloudflare是否配置有
ssl.domain.com
(需使用HTTPS的域名) 的解析(需使用API或工具检查)
提示:自定义主机名的回源依旧会使用Cloudflare API设置的解析。
原理分析
- 由于边缘证书的自动签发失效,导致CDN节点未配置证书出现错误
- 通过使用
自定义主机名
功能进行证书签发后,CDN节点成功获取到证书,因此恢复正常。 - 回退源优先级可能低于API设置的解析,因此自定义主机名的回源依旧受API设置的值控制。
其他可能有用的
- DNS处的CNAME接入格式
[full_hostname].cdn.cloudflare.net
。
例如 域名a.b.com
,主机记录a
,记录类型CNAME
,记录值a.b.com.cdn.cloudflare.net
此笔记仅供参考,作者不对内容实时有效性负责。