将chacha20-poly1305与节点一起使用

bjb*_*568 5 javascript encryption ssl node.js

较旧版本的节点不支持 chacha20-poly1305,但从版本10.0.0开始,节点支持openssl 1.1.0,其中包括chacha.

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

但是https.createServer(),当与支持chacha的浏览器连接时,传递和仅包含chacha http2.createServer()ciphers列表会导致无共享密码错误.密码的示例列表:

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);
Run Code Online (Sandbox Code Playgroud)

它是节点或其他一些我忽略的配置选项的错误吗?

bjb*_*568 0

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

例如,以下内容:

tls.getCiphers().filter((str) => str.includes('chacha')).map((str) => str.toUpperCase())
Run Code Online (Sandbox Code Playgroud)

为我返回这个:

[ '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' ]
Run Code Online (Sandbox Code Playgroud)