【问题标题】:How to disable TLS renegotiation in nginx如何在 nginx 中禁用 TLS 重新协商
【发布时间】:2025-12-21 03:35:17
【问题描述】:

我在托管我的服务器的 nginx 上的 safari 遇到了一个非常奇怪的问题。 ssl 握手失败并弹出服务器证书警告,我在 nginx 调试日志中得到了这个

nginx logs
    2013/11/01 23:27:59 [debug] 16494#0: *240 http recv(): 1
    2013/11/01 23:27:59 [debug] 16494#0: *240 https ssl handshake: 0x16
    2013/11/01 23:27:59 [debug] 16494#0: *240 SSL server name: "www.unitedwifi.com"
    2013/11/01 23:27:59 [debug] 16494#0: *240 SSL_do_handshake: -1
    2013/11/01 23:27:59 [debug] 16494#0: *240 SSL_get_error: 2
    2013/11/01 23:27:59 [debug] 16494#0: *240 reusable connection: 0
    2013/11/01 23:27:59 [debug] 16494#0: *240 SSL handshake handler: 0
    2013/11/01 23:27:59 [debug] 16494#0: *240 SSL_do_handshake: 1
    2013/11/01 23:27:59 [debug] 16494#0: *240 SSL: TLSv1, cipher: "ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1"
    2013/11/01 23:27:59 [debug] 16494#0: *240 reusable connection: 1

在网上搜索后,我能想到的唯一原因是 ssl 重新协商,根据一些帖子,safari 仍然不支持。使用其他浏览器我看不到任何问题。而且 unitedwifi.com 是我在我的 VPN 上托管的门户 nginx 有没有办法从 conf 文件中禁用重新协商?有任何解决此问题的建议吗?

【问题讨论】:

    标签: nginx webserver


    【解决方案1】:

    自 0.7.64 或 0.8.23 起,Nginx 不允许重新协商。而且我在您提供的调试日志中没有看到任何重新协商。

    http://nginx.org/en/CHANGES

    Changes with nginx 0.8.23                                        11 Nov 2009
    
       *) Security: now SSL/TLS renegotiation is disabled.
          Thanks to Maxim Dounin.
    

    很可能,那个证书警告弹窗与nginx无关,而与证书本身有关。

    【讨论】:

    • 可以进一步添加我正在将 https 连接从一个域重定向到另一个域......但它仍然提供第一个域的证书。我认为 SNI 可能是 safari 支持的,但它说支持。我在其他浏览器上没有这样的问题.. 他们似乎都提供了正确的证书