重装OpenSSL后出现ERR_SSL_VERSION_OR_CIPHER_MISMATCH问题求助
Ubuntu 20.04 卸载OpenSSL后HTTPS项目访问故障排查方案
问题背景
在Ubuntu 20.04系统中卸载原生OpenSSL并安装低版本后,系统崩溃并修复登录问题、安装适配版本后,本地HTTPS项目仍无法访问:Chrome提示ERR_SSL_VERSION_OR_CIPHER_MISMATCH,Firefox提示404错误。已尝试替换Glassfish自签名证书、降低Firefox最低TLS版本至1、修改openssl.cnf添加MinProtocol = TLSv1和CipherString = DEFAULT:@SECLEVEL=1,但问题依旧。
非重装系统的解决办法
1. 验证Glassfish SSL配置与OpenSSL的兼容性
- 检查Glassfish的SSL协议与套件配置:
打开Glassfish的domain.xml配置文件(通常在/glassfish/domains/domain1/config/路径下),查找<ssl>节点,确认ssl-enabled-protocols包含你需要的TLS版本(如TLSv1,TLSv1.1,TLSv1.2),同时确保cipher-suite配置与openssl.cnf中的CipherString匹配。 - 强制重启Glassfish服务:
执行systemctl restart glassfish(若用systemd管理)或/glassfish/bin/asadmin restart-domain,确保配置生效。
2. 修复系统级OpenSSL依赖链
- 重新安装核心SSL依赖:
执行sudo apt-get install --reinstall libssl1.1 openssl(Ubuntu 20.04默认依赖libssl1.1),强制修复卸载过程中损坏的依赖文件。 - 验证版本一致性:
执行openssl version查看当前版本,再执行ldd $(which openssl)确认链接的库文件版本与显示版本一致,避免出现版本不兼容的情况。
3. 单独排查Firefox 404错误
- 确认访问地址有效性:
404错误大概率与SSL无关,检查是否输入了正确的端口(Glassfish默认HTTPS端口为8181)、项目路径,避免拼写错误。 - 清理Firefox缓存与旧证书:
进入Firefox设置→隐私与安全,清除浏览器缓存;再进入“证书”→“查看证书”,删除之前生成的旧自签名证书,重新导入新证书并信任。
4. 深度调试SSL握手过程
- 用openssl s_client抓详细握手日志:
执行openssl s_client -connect localhost:8181 -tls1 -debug,查看握手阶段的具体错误(如协议协商失败、套件不支持等),针对性调整配置。 - 用curl抓请求细节:
执行curl -v -k https://localhost:8181(-k忽略证书验证),查看请求过程中是否有握手失败的明确提示,比如no suitable signature algorithm,据此调整CipherString配置。
5. 修复系统OpenSSL配置的全局生效问题
- 确认配置文件路径与更新:
Ubuntu 20.04的openssl.cnf位于/etc/ssl/openssl.cnf,修改后执行sudo update-ca-certificates更新系统证书配置。 - 检查应用局部配置覆盖:
确认Glassfish没有单独指定SSL配置文件(部分应用会加载自身的openssl配置),导致系统级配置未生效。
内容的提问来源于stack exchange,提问作者Sergei
相关产品推荐
相关产品推荐

