CL+SSL SSL 错误:禁用不安全的旧版重新协商。如何绕过或解决?

jfa*_*lks 5 ssl openssl sbcl common-lisp drakma

我正在尝试访问 https 端点以使用 common-lisp(sbcl) 拉回一些数据。有一段时间,这没有问题。然后有一天我开始收到以下错误

SSL error queue:
error:0A000152:SSL routines::unsafe legacy renegotiation disabled
   [Condition of type CL+SSL::SSL-ERROR-SSL]
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 drakma 和 dexador,但两者都出现相同的错误。我已通过 openssl 确认我尝试连接的服务器不支持重新协商。

openssl s_client -connect

New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Run Code Online (Sandbox Code Playgroud)

我使用的是 OSX,我的开放 ssl 版本是 LibreSSL 2.8.3。

因此,据我了解,我的客户端正在尝试启动重新协商,但服务器拒绝了它。我真的不知道从这里到哪里去,此时我什至不确定问题真正处于哪个级别,openSSL、CL+SSL 还是构建在 CL+SSL 之上的 http 客户端库。有没有办法禁用重新协商或强制建立新连接?我缺少一些设置吗?

小智 2

在 Openssl 1.1.1 中,SSL_OP_LEGACY_SERVER_CONNECT 标志默认打开,但从 Openssl 3.0.0 开始默认关闭。

检查下面的文章

SSL_CTX_set_options(ssl_ctx, SSL_OP_LEGACY_SERVER_CONNECT);
Run Code Online (Sandbox Code Playgroud)

https://www.openssl.org/docs/man3.0/man3/SSL_clear_options.html

  • 你好!我通过创建新的 conda 环境然后运行“conda install -c conda-forge gdal”获得了 openssl 版本 3。从您的评论中我不明白如何启用 SSL_OP_LEVACY_SERVER_CONNECT。这是您在“制作” openssl 时修改的标志,还是在配置文件中更改的内容? (2认同)