连接到旧API时出现“ tls_process_ske_dhe:dh密钥太小”错误

时间:2019-06-04 14:21:30

标签: node.js ssl

我正在尝试使用Node连接到旧API(运行Java 6),并且受到SSL握手的阻止。

完全错误如下:Error: 65756:error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small:openssl\ssl\statem\statem_clnt.c:1472:

我尝试了许多不同的方法来解决此问题,但没有一个使我更接近。这是我为避免必须进行整个集成而运行的测试脚本:

const tls = require('tls');

tls.connect({
    host: 'old.api.com',
    port: 8443,
    //ciphers: suiteFromNmap,
    //secureProtocol: 'TLSv1_method',
    //minDHSize: 768,
}, function(result) {
    console.log(result);
}).on('error', function(err) {
    console.log(err);
});

我尝试使用ciphers参数,无论使用哪种套件都没有任何区别,有时会因找不到通用密码而出现不同的错误。

我对nmap进行了一些挖掘,导致了这一点:

PORT     STATE SERVICE
8443/tcp open  https-alt
| ssl-enum-ciphers:
|   TLSv1.0:
|     ciphers:
|       TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA - E
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 768) - E
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 768) - C
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 768) - B
|       TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 768) - E
|       TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E
|       TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|     compressors:
|       NULL
|     cipher preference: client
|     warnings:
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       64-bit block cipher DES vulnerable to SWEET32 attack
|       64-bit block cipher DES40 vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|       Key exchange (dh 768) of lower strength than certificate key
|_  least strength: E

我尝试更改minDHSize参数以匹配警告中指出的参数,但错误保持不变。

试图使用在线SSL检查(https://www.ssllabs.com/ssltest/)并得到了以下信息: ssllabs test result

尝试了这些密码,但仍然存在相同的错误。

ssllabs.com似乎对其证书感到满意,但是wget在没有--no-check-certificate的情况下失败:

ERROR: The certificate of ‘old.api.com’ is not trusted.
ERROR: The certificate of ‘old.api.com’ hasn't got a known issuer.

在这一点上,我不确定我还能尝试什么,我可以做些什么使节点连接到该服务器?考虑到没有什么真正重要的事情或私人发生的事情,我愿意选择它的低安全性版本,只要我不必使整个节点实例不安全即可。

1 个答案:

答案 0 :(得分:0)

尝试在/etc/ssl/openssl.cnf中将CipherString设置为较低级别

    [ default_conf ]

    ssl_conf = ssl_sect

    [ssl_sect]

    system_default = ssl_default_sect

    [ssl_default_sect]
    MinProtocol = TLSv1.2
    CipherString = DEFAULT:@SECLEVEL=1