较旧版本的 Node did not support chacha20-poly1305,但是as of version 10.0.0 Node 支持openssl 1.1.0,其中包括chacha。

  • require('tls').getCiphers()包括chacha。
  • $ openssl ciphers包括chacha。

  • 但是,仅通过chacha将https.createServer()http2.createServer()传递给ciphers列表时,在与支持chacha的浏览器连接时不会出现共享密码错误。密码示例列表:
    https.createServer({
        // ...
        'ciphers': [
            'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256',
            'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256',
            'TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256',
            'TLS_PSK_WITH_CHACHA20_POLY1305_SHA256',
            'TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256',
            'TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256',
            'TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256'
        ].join(':')
    }, someFunction).listen(443);
    

    这是我忽略的 Node 错误还是其他一些配置选项?

    最佳答案

    正如GitHub上的mscdex explained一样,我尝试使用的字符串格式错误。如果将字符串从tls.getCiphers()转换为大写字母,它将返回有效字符串。

    例如,以下内容:

    tls.getCiphers().filter((str) => str.includes('chacha')).map((str) => str.toUpperCase())
    

    为我返回此:
    [ 'DHE-PSK-CHACHA20-POLY1305',
      'DHE-RSA-CHACHA20-POLY1305',
      'ECDHE-ECDSA-CHACHA20-POLY1305',
      'ECDHE-PSK-CHACHA20-POLY1305',
      'ECDHE-RSA-CHACHA20-POLY1305',
      'PSK-CHACHA20-POLY1305',
      'RSA-PSK-CHACHA20-POLY1305' ]
    

    09-20 13:38