【问题标题】:Nginx SSL Handshake ErrorNginx SSL 握手错误
【发布时间】:2015-02-03 04:25:44
【问题描述】:

我的服务器日志中出现以下错误:

[crit] 915#0: *46701 SSL_do_handshake() 失败(SSL: 错误:140A1175:SSL 例程:SSL_BYTES_TO_CIPHER_LIST:不适当 回退)在 SSL 握手时,客户端:187.50.199.66,服务器: 0.0.0.0:443

这是什么意思?我该如何解决?

请帮帮我。

【问题讨论】:

  • 我曾经在我的 NginX 中看到过类似的错误。当时,将 NginX 升级到最新版本帮助解决了这个问题。也许你应该尝试将 NginX 升级到可用的最新版本。
  • 我更新了它..但问题仍然存在..
  • 在这个提交到 openssl 的提交中添加了错误消息:git.openssl.org/gitweb/…,这似乎与至少某些浏览器不兼容。
  • 听起来这是 Nginx 中的一个错误,并且日志记录很重要:trac.nginx.org/nginx/ticket/662
  • 遇到了同样的问题。通过替换“listen 443 ssl;”来修复它用这两行:“listen 443; ssl on;”但是我不知道这与问题有什么关系。也许还有其他东西(它是 docker 容器中的 nginx)。

标签: linux ubuntu nginx server


【解决方案1】:

看起来,因为它与security bug in OpenSSL 连接。这与您的 nginx 配置无关。这只是表明您的服务器有客户端无法正确处理 SSL 握手。

什么是 SSL 握手?

基本上它在每个会话开始时在客户端和服务器之间交换一些消息。它由 6 个阶段组成:

  1. 客户您好
  2. 服务器你好
  3. 身份验证和预主密钥
  4. 解密和主密钥
  5. 生成会话密钥
  6. 使用会话密钥加密

阅读更多http://www.symantec.com/connect/blogs/how-does-ssl-work-what-ssl-handshake

总而言之 - 您的服务器发出此警告以表明某些客户端(非)故意破坏此过程(例如,过早结束连接,或尝试在一个会话中多次打开它。

如何解决?

如果你真的想摆脱这条消息(不推荐),你可以在你的 nginx.conf 文件中将错误日志级别 9 更改为:

error_log logs/error.log alert;

*可用级别为:调试 |信息 |通知 |警告 |错误 |暴击 |警报 |出现

http://nginx.org/en/docs/ngx_core_module.html#error_log

【讨论】: