使用来自 node-json-rpc 库的客户端时使用正确的 SSL 协议

using correct SSL protocol when using client from node-json-rpc library

我正在使用这个库 https://www.npmjs.com/package/node-json-rpc 使客户端调用 https 服务器公开 RPC apis。

但是,当我 运行 代码时,我得到这个错误

Error: SSLv3 methods disabled
    at new SecureContext (_tls_common.js:50:20)
    at Object.createSecureContext (_tls_common.js:89:13)
    at Object.connect (_tls_wrap.js:1120:48)
    at Agent.createConnection (https.js:119:22)
    at Agent.createSocket 

我的密码是

var rpc = require('node-json-rpc');

var options = {
      port: 443,
      host: 'mynode',
      path: '/rpc',
      strict: true,
      ssl: {
        // protocol: 'TLSv1.2'
      }

    };

this.client = new rpc.Client(options);

this.client.call(
          {"jsonrpc": "2.0", "method": "txpool_content", "params": [], "id": 1},
          function (err, res) {
            if( err ) {
                resolve(null);
            }
            else {
                resolve(res.result);
            }
          }
        );

我确保这个 api 可以从 Postman 使用这个端点 https://mynode/rpc

我知道此协议 SSLv3 可能对 node js 禁用,但我在文档中找不到任何其他选项。 我没有证书和密钥。

来自图书馆代码(node_modules/node-json-rpc/lib/rpcclient.js):

if (conf.ssl) {
  options.servername = conf.ssl.sniName || 'RPC-Server';
  options.secureProtocol = conf.ssl.protocol || 'SSLv3_client_method';
  ...

看来您可以在选项中设置 { ssl: { protocol: 'something' } }

那是什么something?我们来看看 Node.js 文档:

https://nodejs.org/api/https.html:

The following additional options from tls.connect() are also accepted: ... secureProtocol ...

https://nodejs.org/api/tls.html#tls_tls_connect_options_callback:

secureProtocol <string> Optional SSL method to use. The possible values are listed as SSL_METHODS, use the function names as strings. For example, 'TLSv1_2_method' to force TLS version 1.2

他们提供的示例是一个很好的起点,但该页面还链接到可用 SSL 方法的完整列表:https://www.openssl.org/docs/man1.1.0/ssl/ssl.html#Dealing-with-Protocol-Methods