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

时间:2018-08-22 00:55:06

标签: node.js json-rpc

我正在使用此库https://www.npmjs.com/package/node-json-rpc来对暴露RPC API的https服务器进行客户端调用。

但是,当我运行代码时,出现此错误

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上使用

我了解到节点js可能禁用了该协议SSLv3,但是我在文档中找不到其他任何选项。 我没有证书和钥匙。

1 个答案:

答案 0 :(得分:1)

从库代码(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

  

还接受tls.connect()中的以下其他选项:... secureProtocol ...

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

  

secureProtocol <string>要使用的可选SSL方法。可能的值列为SSL_METHODS,使用函数名称作为字符串。例如,'TLSv1_2_method'强制使用TLS版本1.2

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