指向Azure VM的子域名HTTPS访问出现ERR_SSL_PROTOCOL_ERROR问题
以下是导致ERR_SSL_PROTOCOL_ERROR的常见原因及对应的排查步骤:
Web应用未在4000端口启用SSL监听
HTTP能正常访问sub.mydomain.com:4000说明端口网络连通,但如果应用仅配置了HTTP监听,未在该端口绑定SSL证书并启用HTTPS协议,客户端发起TLS握手请求时,服务器会返回HTTP响应,直接触发协议不匹配错误。
排查:查看应用的配置文件,确认是否开启HTTPS监听项,并指定了正确的证书(公钥、私钥)路径;使用命令openssl s_client -connect sub.mydomain.com:4000测试,若无法返回证书信息或提示握手失败,说明应用未正确配置SSL。SSL证书配置无效
即使已获取证书,若存在以下情况也会导致握手失败:- 证书的主体(Subject)或SAN字段不匹配
sub.mydomain.com; - 证书链不完整(缺少中间证书),浏览器无法验证证书信任链;
- 证书已过期或未正确导入应用/代理服务器。
排查:用上述openssl命令查看返回的证书详情,确认域名匹配度;检查证书文件是否包含完整的链(部分CA会单独提供中间证书,需与服务器证书合并)。
- 证书的主体(Subject)或SAN字段不匹配
反向代理(若使用)的SSL配置缺失
如果虚拟机内使用了Nginx、Apache等反向代理,仅配置HTTP转发到应用端口,未在4000端口配置HTTPS监听规则,也会出现该错误。
排查:查看代理服务器的配置文件,确认是否存在针对4000端口的HTTPS server块,是否正确关联证书文件,且转发目标为应用的正确端口(若应用本身运行在非4000的HTTP端口)。TLS版本兼容性问题
若应用仅启用了过时的TLS版本(如TLS 1.0)或过于前沿的版本,浏览器可能因不支持而拒绝握手。
排查:用指定版本的openssl命令测试,如openssl s_client -connect sub.mydomain.com:4000 -tls1_2或-tls1_3,若某一版本能成功握手,说明需调整应用的TLS版本配置,启用主流兼容版本(TLS 1.2+)。本地缓存干扰
本地DNS缓存的旧记录、浏览器缓存的无效证书信息可能导致访问异常。
排查:清除本地DNS缓存(Windows执行ipconfig /flushdns,Linux执行systemd-resolve --flush-caches),使用浏览器隐私窗口访问测试。
内容的提问来源于stack exchange,提问作者White Bear

