OpenSSL无法建立SSL连接,因为协议不受支持。

3

我正在尝试从这里构建OpenCog,当我执行以下命令时:

octool -rdcpav -l default

它构建了所有内容,但在安装Link-Grammar这一步时出现了以下情况:
[octool] Installing Link-Grammar....
--2020-06-13 10:09:36--  http://www.abisource.com/downloads/link-grammar/current/
Resolving www.abisource.com (www.abisource.com)... 130.89.149.216
Connecting to www.abisource.com (www.abisource.com)|130.89.149.216|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.abisource.com/downloads/link-grammar/current/ [following]
--2020-06-13 10:09:37--  https://www.abisource.com/downloads/link-grammar/current/
Connecting to www.abisource.com (www.abisource.com)|130.89.149.216|:443... connected.
OpenSSL: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
Unable to establish SSL connection.

I'm on ubuntu 20.04 LTS

1个回答

21

www.abisource.com只支持已经被破解(或至少削弱)且过时的TLS版本1.0。根据其标头,它是2010年发布的Apache 2.2.15 (Fedora)!

因此,这似乎与OpenSSL v1.1.1 ssl_choose_client_version unsupported protocol相同,只不过Ubuntu代替了Debian,octool使用了wget而非openvpn。尝试接受的答案:在 [system_default_sect] 下编辑/etc/ssl/openssl.cnf以降级MinProtocol=TLSv1,并可能为CipherString=DEFAULT:@SECLEVEL=1 -- 服务器的DHE密钥为1k,我不记得它是否在等级2下起作用,尽管它的证书是荒谬的RSA 4k!

更新: 好吧,我下载并安装了Ubuntu 20.04,包括libssl1.1的源代码,并查看了它,他们在这里没有保留Debian方法,他们进行了更改。具体来说,他们没有改变openssl.cnf文件要求TLSv1.2,而是编译 OpenSSL/libssl使默认 SECLEVEL 2,强制SECLEVEL 2使用TLSv1.2(这在上游不是这样)。

然而,您仍然可以通过添加所需的(弱)配置到openssl.cnf来修复它:

  • 在默认部分中的任何位置,即第一行以[开头之前添加一行

openssl_conf = openssl_configuration

我喜欢把它放在最上面,但那只是我的个人偏好。

  • 技术上说可以放在任何章节边界,但在结尾处加三个新章节最容易。

  • [openssl_configuration]
    ssl_conf = ssl_configuration
    [ssl_configuration]
    system_default = tls_system_default
    [tls_system_default]
    CipherString = DEFAULT:@SECLEVEL=1
    

    请注意,由于MinProtocol尚未存在,您无需添加它(代码默认设置已经足够),但如果您愿意,可以添加它。

    现在它可以工作了:

    $ wget https://www.abisource.com/
    --2020-06-20 05:11:11--  https://www.abisource.com/
    Resolving www.abisource.com (www.abisource.com)... 130.89.149.216
    Connecting to www.abisource.com (www.abisource.com)|130.89.149.216|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 7687 (7.5K) [text/html]
    Saving to: ‘index.html’
    
    index.html          100%[===================>]   7.51K  --.-KB/s    in 0.002s
    
    2020-06-20 05:11:12 (3.90 MB/s) - ‘index.html’ saved [7687/7687]
    

    正如您所评论的那样,这是一项全局变更。您可以通过编辑您的octool副本并在wget命令中添加选项--ciphers=DEFAULT:@SECLEVEL=1来为该特定操作更改它。使用原始的openssl.cnf:

    $ wget --ciphers=DEFAULT:@SECLEVEL=1 https://www.abisource.com/
    --2020-06-20 05:15:21--  https://www.abisource.com/
    Resolving www.abisource.com (www.abisource.com)... 130.89.149.216
    Connecting to www.abisource.com (www.abisource.com)|130.89.149.216|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 7687 (7.5K) [text/html]
    Saving to: ‘index.html.1’
    
    index.html.1        100%[===================>]   7.51K  --.-KB/s    in 0s
    
    2020-06-20 05:15:22 (330 MB/s) - ‘index.html.1’ saved [7687/7687]
    

    是的,我找到了那个答案,但是在/etc/ssl/openssl.cnf中我没有找到[section_default_sect]这一部分。我可以直接写入它并写入MinProtocol和CipherString吗? - undefined
    1
    如果该部分尚不存在,它不应该引起/影响此问题,因此不需要进行更改。您可以使用strace wget(单独运行)来确认其使用的配置。我会尽量在接下来的几天内设置一个新的虚拟机并检查是否有时间。 - undefined
    2
    @PatrickMevzek:请查看编辑(如果您没有自动收到通知)。加油。 - undefined
    所以,我们有一个连接到 SQL 数据库和另一个连接到 API 的连接。使用默认的 DEFAULT:@SECLEVEL=2 时,API 可以正常工作,但是数据库无法连接。如果我切换到 DEFAULT:@SECLEVEL=1,数据库可以正常工作,但是 API 无法连接。如何使它们同时正常工作? - undefined
    1
    @TecHunter:如果至少有一个允许你配置密码字符串,就使用它;根据我的经验,SQL驱动程序通常不允许,但连接到某种API的软件差异很大。否则,如果两者都使用标准配置逻辑,创建两个配置文件,并使用环境变量OPENSSL_CONF来指向至少非标准的那个。如果这样还不起作用,除非你能够修补至少其中一个,或将至少一个移动到另一个系统(也许是虚拟系统),否则你可能没有其他办法了。 - undefined
    显示剩余2条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接