【问题标题】:Handshake failure when requesting nginx server in https protocol在 https 协议中请求 nginx 服务器时握手失败
【发布时间】:2018-02-06 11:03:12
【问题描述】:

我遇到了 https 请求的问题。问题是我正在配置 nginx 服务器以接受来自 Windows 计算机上应用程序的 https 请求,但无法连接到服务器。以下是wireshark的一些资料:

Windows 应用程序请求:

来自 server1 的响应:

另一个 server2 响应:

服务器上的 nginx 版本是 1.12.2,openssl 版本是 1.0.1f 。 Nginx 配置如下:

ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/cert.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

来自https://www.ssllabs.com/ssltest/analyze.html的关于server1的信息:

因为我在服务器 TLSv1.0 中找不到任何客户端的密码套件,例如“TLS_RSA_WITH_3DES_EDE_CBC_SHA”。我想知道是否是语言或软件之间的差异导致了问题的发生。

顺便说一句,除了关于 server2 的请求 url 之外,我没有更多信息,我的目标是部署 server1 以接受来自 Windows 客户端的请求。

任何人都可以提供一些解决问题的建议或提供一些线索吗?非常感谢!

【问题讨论】:

  • 我发现这个工具非常有助于找到正确的 cipers 配置,给目标客户我希望支持 mozilla.github.io/server-side-tls/ssl-config-generator 。希望这可以帮助
  • (1) 这真的是 OpenSSL 1.0.1f 还是您使用的是发行版(如 RHEL/CentOS/Oracle/SL 或 Debian/Ubuntu/Mint)或类似的启动 从 1.0.1f 等上游版本开始,可能会更改构建设置(例如 RH 过去删除 EC),并添加反向移植的安全补丁? (2) 您尝试的 ssllabs 链接未显示有关您的服务器的任何信息。
  • 感谢和抱歉错误链接到 ssllabs。我从该链接中获得了上面未显示的服务器域的信息,我应该显示有关它的屏幕截图。我使用命令openssl version 获得了OpenSSL 版本信息,它显示OpenSSL 1.0.1f 6 Jan 2014。 Linux 分区是 Ubuntu 14.04.5 LTS。 @dave_thompson_085
  • 感谢您的建议。我在我的服务器上找到了有用的 nginx 配置。但让我感到困惑的是,我找不到任何可以匹配客户密码规范的密码套件。而且我找到了TLS_RSA_WITH_3DES_EDE_CBC_SHAhere,OpenSSL 列中似乎没有相应的信息。我想知道服务器如何使用该密码套件处理请求。 @LucaT。
  • (1) 在Ubuntu上openssl version只显示上游版本;要获得实际的修补版本,请使用apt* 工具或dpkg -s openssl。但是检查启动板我没有看到任何会影响这一点的最新补丁。 (2) 上游 OpenSSL 确实实现了该套件,名称为 DES-CBC3-SHA,尽管某些版本由于最近的生日问题 (SWEET32) 而禁用它;我不知道为什么 Mozilla 网站没有它,但请参阅您的手册页以获取密码 (1) 或运行 openssl ciphers [-v]。如果系统上的 nginx 日志中出现任何不工作的内容怎么办?

标签: ssl nginx https


【解决方案1】:

我终于找到了问题的原因。出现问题是因为 nginx 1.12.2 默认不支持周 ssl 密码。而基于XP等不同版本Windows操作系统的客户端应用程序提供有限的密码套件,如TLS_RSA_WITH_3DES_EDE_CBC_SHA和TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA。这些密码套件的安全性很弱。 IE8浏览器也出现同样的问题。 IE8 有时无法访问较新的网站。

我的解决办法是用一些额外的参数重新编译nginx:

安装依赖
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev unzip git

下载nginx
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz tar zxf nginx-1.12.2.tar.gz

检查 openssl 版本
dpkg -s openssl

检查 openssl 对 3DES 的支持
openssl ciphers -v "3DES"

下载 openssl 源码 openssl >=1.1.0 默认不支持 3DES
wget -O openssl.zip -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_1f.zip unzip openssl.zip mv openssl-OpenSSL_1_0_1f/ openssl

编译安装nginx
cd nginx-1.12.2 ./configure --with-openssl=../openssl --with-http_ssl_module --with-openssl-opt='enable-weak-ssl-ciphers' make sudo make install

通过一些 ssl 配置,服务器能够支持带有 3DES 密码套件的 https 请求。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2021-10-15
    • 2013-05-04
    相关资源
    最近更新 更多