【问题标题】:Secure Renegotiation is not supported OpenSSL issue不支持安全重新协商 OpenSSL 问题
【发布时间】:2014-07-30 06:15:59
【问题描述】:

我需要从 RedHat Linux 服务器连接到 Microsoft Dynamics CRM 服务器。地址是xxx.api.crm4.dynamics.com。服务器接受 TLSv1 但不接受 1.1 或 1.2 并且不提供重新协商。为了用最新的补丁维护我的 RedHat 服务器,尤其是围绕 Heartbleed 的补丁,我需要升级到更新版本的 OpenSSL。但是,这会在 RedHat 服务器上启用 TLSv1.2。

有没有办法将 OpenSSL 配置为在出站通信中不使用 TLSv1.2 和 TLSv1.1?

【问题讨论】:

    标签: openssl


    【解决方案1】:

    有没有办法将 OpenSSL 配置为在出站通信中不使用 TLSv1.2 和 TLSv1.1?

    为入站和出站协商协议版本。它是ClientHello 的一部分。虽然服务器可以使用比客户端宣传的更低的协议版本,但您不能混合搭配。

    OpenSSL 允许您定义 OPENSSL_NO_TLS1,但我相信这会杀死所有 TLS,而不仅仅是 TLS 1.1 和 TLS 1.2。

    默认情况下,某些 Linux 发行版在客户端上禁用 TLS 1.2。例如,Ubuntu 为 12 和 13 执行此操作。他们通过 OpenSSL 的 OPENSSL_NO_TLS1_2_CLIENT 执行此操作:

    $ /usr/bin/openssl version -a
    OpenSSL 1.0.1 14 Mar 2012
    built on: Mon Jun  2 19:37:18 UTC 2014
    platform: debian-amd64
    options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) 
    compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN
       -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4
       -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2
       -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_NO_TLS1_2_CLIENT
       -DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DMD32_REG_T=int -DOPENSSL_IA32_SSE2
       -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM
       -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM
       -DGHASH_ASM
    OPENSSLDIR: "/usr/lib/ssl"
    

    不支持安全重新协商 OpenSSL 问题

    这是您的问题的标题,它是一个单独的问题。你有什么问题?


    编辑(来自 cmets):

    我正在从我们为 Heartbleed 修补 SSL 的 RedHat 服务器连接,因此通过尝试与 TLSv1.2 协商来开始任何握手。因此接收服务器没有响应。

    我认为这与安全的重新协商无关(但我可能错了)。

    以下是如何以编程方式执行此操作。您不需要再次编译 OpenSSL。但是你需要再次编译你的程序。

    下面是使用method 的方法(注意使用TLSv1_method()):

    /* https://www.openssl.org/docs/ssl/SSL_CTX_new.html */
    const SSL_METHOD* method = TLSv1_method();
    ASSERT(NULL != method);
    
    /* http://www.openssl.org/docs/ssl/ctx_new.html */
    ctx = SSL_CTX_new(method);
    ASSERT(NULL != ctx);
    ...
    

    或者,你可以用标志来做:

    /* https://www.openssl.org/docs/ssl/SSL_CTX_new.html */
    const SSL_METHOD* method = SSLv23_method();
    ASSERT(NULL != method);
    
    /* http://www.openssl.org/docs/ssl/ctx_new.html */
    ctx = SSL_CTX_new(method);
    ASSERT(ctx != NULL);
    
    /* https://www.openssl.org/docs/ssl/ctx_set_verify.html */
    SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback);
    /* Cannot fail ??? */
    
    /* Remove the most egregious. Because SSLv2 and SSLv3 have been      */
    /* removed, a TLSv1.0 handshake is used. The client accepts TLSv1.0  */
    /* and above. An added benefit of TLS 1.0 and above are TLS          */
    /* extensions like Server Name Indicatior (SNI).                     */
    long flags = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
         flags |= SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
    
    long old_opts = SSL_CTX_set_options(ctx, flags);
    UNUSED(old_opts);
    ...
    

    我更喜欢 flags 方法,因此我可以禁用损坏的协议(如 SSLv2)和损坏的功能(如压缩)。 flags 方法还允许我指定“TLS 1.0 及更高版本”(即,SSLv23_method()SSL_OP_NO_*),而不仅仅是 TLS 1.0(即,使用 TLS1_method())。


    JW] 我认为这与安全的重新谈判无关(但我可能错了)。

    如果我错了,下面是安全重新协商的工作原理:在ClientHello 中插入一个伪密码套件。常规密码套件类似于TLS_RSA_WITH_AES_256_CBC_SHA。使用的伪套件是TLS_EMPTY_RENEGOTIATION_INFO_SCSV

    如果服务器无法处理TLS_EMPTY_RENEGOTIATION_INFO_SCSV,那么我认为服务器需要升级。

    我不知道是否有可用的客户端选项(例如SSL_OP_* 标志),因为我拒绝使用损坏的服务器。我认为您可以降级到 OpenSSL 0.9.8,但我不建议这样做。

    【讨论】:

    • 感谢您的回答。作为一个菜鸟,我很可能错误地表达了我的问题。我需要连接到不提供 TLS 重新协商且仅与 TLSv1 通信的服务器。我正在从我们为 Heartbleed 修补 SSL 的 RedHa 服务器连接,因此通过尝试与 TLSv1.2 协商来开始任何握手。因此接收服务器没有响应。有没有办法在我的服务器上禁用 TLSv1.2 和 TLSv1.1 而无需编译我自己的 openssl 并禁用这些协议?
    • @user3421121 - 答案中添加了更多信息。我认为它涵盖了您的 cmets。
    • 非常感谢您的回答,我会试一试。我同意您对损坏的服务器的评论,但拥有此特定云服务的 Microsoft 已告知他们无意进行任何更改。因此,当我们的客户希望我们使用这个产品时,我们必须找到一种方法来让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2018-12-02
    • 2014-05-31
    • 1970-01-01
    • 2011-04-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多