OpenSSL KEYUPDATE 和“SSL_key_update:错误的 ssl 版本”

per*_*oud 4 ubuntu openssl aes

我使用的是 Ubuntu 19.04,它附带了 OpenSSL 1.1.1b。系统信息如下。SSL_key_update:wrong ssl version我在传输大文档时遇到了KEYUPDATE

我正在启动我的服务器:

openssl s_server -accept 443 -cert /app/keys/cert.pem  -key /app/keys/private.key
Run Code Online (Sandbox Code Playgroud)

我使用 AES128 通过以下命令连接到服务器:

openssl s_client -connect localhost:443 -cipher AES128-GCM-SHA256 -tls1_2
Run Code Online (Sandbox Code Playgroud)

有时它会起作用,特别是当我发送的数据少于 100KB 时。然而,对于较大的传输,它通常会停止:

KEYUPDATE
140048546800768:error:1420310A:SSL routines:SSL_key_update:wrong ssl version:../ssl/ssl_lib.c:2090:
Run Code Online (Sandbox Code Playgroud)

其他人也看到了这一点,但他们似乎没有断定配置的哪个方面导致了问题。

有趣的是,如果我s_client针对同一个 1.1.1b 服务器运行较旧的 openssl 1.1.0h-fips,则在使用相同-cipher AES128-GCM-SHA256 -tls1_2选项时它工作得很好。事实上它说:

Protocol  : TLSv1.2
Cipher    : AES128-GCM-SHA256
Run Code Online (Sandbox Code Playgroud)

与 1.1.1b 客户端一样...只是 1.1.1b 客户端似乎无法正常工作。

问题是什么?我该如何解决?


这是系统信息:

cli5# openssl version -a
OpenSSL 1.1.1b  26 Feb 2019
built on: Wed Apr 17 16:50:04 2019 UTC
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr) 
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-FmdPCA/openssl-1.1.1b=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
cli5# cat /proc/version
Linux version 5.0.0-17-generic (buildd@lcy01-amd64-015) (gcc version 8.3.0 (Ubuntu 8.3.0-6ubuntu1)) #18-Ubuntu SMP Tue Jun 4 15:34:08 UTC 2019
cli5#
Run Code Online (Sandbox Code Playgroud)

Mat*_*ell 8

s_client是一个测试工具,它解释在 stdin 上收到的某些字母以执行某些操作。KeyUpdate 操作通过K/触发kTLSv1.3然而,KeyUpdate 仅在协商后才有意义。TLSv1.2但是,您仅在命令行上明确请求。在这些情况下使用K/k会导致“ssl 版本错误”错误。

您可以使用该选项关闭交互式命令-ign_eof- 尽管这确实会产生保持运行的不幸副作用s_client,即使在您通过管道传输的文件已全部发送之后也是如此。