我正在使用此库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
,但是我在文档中找不到其他任何选项。
我没有证书和钥匙。
答案 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