"unsafe legacy renegotiation disabled"报错根源及服务端解决方案
问题描述
使用以下命令测试服务器:
openssl s_client -connect myserver.myhost.com:443
收到响应报错:
CONNECTED(00000003) 80BBF425D37F0000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:../ssl/statem/extensions.c:879: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 3058 bytes and written 336 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: PSK identity: None PSK identity hint: None SRP username: None Start Time: 1687542368 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no ---
需明确:
- 该报错的服务端根源
- 服务端的正规解决方法(已排除客户端问题,知晓客户端添加
Options = UnsafeLegacyRenegotiation可临时绕过,但需正规方案) - 备注:谷歌浏览器访问该URL无警告
报错根源
- 核心原因:服务端未启用TLS安全重协商扩展(RFC 5746),而OpenSSL 3.0及以上版本默认禁用了存在中间人攻击风险的旧版TLS重协商机制。
- 响应中的
Secure Renegotiation IS NOT supported直接证实服务端不支持安全重协商,当OpenSSL客户端尝试握手时,检测到服务端仅支持不安全的旧版重协商,因此触发阻断报错。 - 谷歌浏览器能正常访问的原因:浏览器对旧版重协商的兼容性策略更宽松,或者在本次握手流程中未触发重协商操作,因此未暴露该问题。
服务端解决方法
针对不同常见服务端软件,给出正规配置方案:
Nginx
- 确保Nginx版本≥1.0.0(该版本及以上原生支持RFC 5746安全重协商)
- 在目标域名的
server配置块中添加:
说明:ssl_renegotiation on;on仅允许安全重协商;若需兼容极端老旧客户端,可临时设为legacy(允许旧版+安全重协商),但推荐优先使用on以保障安全性。
Apache
- 确保已启用
mod_ssl模块 - 在VirtualHost配置段中添加:
说明:SSLRenegotiation securesecure仅允许安全重协商;若需兼容旧客户端,可设为on(允许旧版+安全重协商),但优先推荐secure。
Tomcat
- 确保Tomcat版本≥8.5(默认支持安全重协商,旧版本建议升级)
- 在
conf/server.xml的Connector配置中添加:sslRenegotiationAllowed="true"
通用原则
- 升级服务端的SSL/TLS依赖库(如OpenSSL、BoringSSL等)到支持RFC 5746的版本
- 配置服务端仅启用安全重协商机制,彻底禁用纯旧版重协商,避免中间人攻击风险
内容的提问来源于stack exchange,提问作者Ranieri Mazili
相关产品推荐
相关产品推荐

