证书链中的自签名证书将node.js SDK用于Watson Assistant时出错

时间:2018-12-20 07:47:41

标签: node.js ibm-watson watson-conversation

我一直在使用IBM Watson API及其node.js SDK。我面临的问题是使用node.js SDK调用Watson API总是会返回以下错误。

{ Error: self signed certificate in certificate chain
    at TLSSocket.onConnectSecure (_tls_wrap.js:1049:34)
    at TLSSocket.emit (events.js:182:13)
    at TLSSocket._finishInit (_tls_wrap.js:631:8) code: 
'SELF_SIGNED_CERT_IN_CHAIN' }

我尝试设置 ssl-strict false process.env.NODE_TLS_REJECT_UNAUTHORIZED =“ 0”; 但没有运气。

var watson = require('watson-developer-cloud');

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var assistant = new watson.AssistantV1({
  iam_apikey: 'API-KEY',
  version: '2018-09-20',
  url: 'URL'
});

assistant.message({
  workspace_id: 'WORKSPACE-ID',
  input: {'text': 'Input-Text'},
},  function(err, response) {
  if (err)
    console.log('error:', err);
  else
    console.log(JSON.stringify(response, null, 2));
});

3 个答案:

答案 0 :(得分:0)

代码中的url和iam_apikey不正确:

var assistant = new watson.AssistantV1({
  iam_apikey: 'API-KEY',
  version: '2018-09-20',
  url: 'URL'
});

在我的代码示例https://github.com/IBM/watson-assistant-app-connect中,初始化为:

const AssistantV1 = require('watson-developer-cloud/assistant/v1');

const assistant = new AssistantV1({
  url: 'https://gateway.watsonplatform.net/assistant/api',
  version: '2018-02-16'
});

它将从环境变量ASSISTANT_IAM_APIKEY中获取api密钥。

答案 1 :(得分:0)

我暂时发现以下解决方法。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var assistant = new watson.AssistantV1({
  iam_apikey: YOUR-API-KEY,
  version: '2018-09-20',
  url: YOUR-URL,
  disable_ssl_verification: true
});

在这里,将 disable_ssl_verification 设置为 true 可以解决问题,尽管我不相信这是前进的永久方法。

答案 2 :(得分:0)

请勿使用 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";。此设置不仅会影响IBM Watson Node.js SDK,还会影响您的所有应用程序。

我们在构造函数中添加了一个特定变量,以使用自签名证书处理服务器。 disable_ssl_verification仅影响我们使用request的HTTP库。

var assistant = new watson.AssistantV1({
  iam_apikey: 'YOUR-API-KEY',
  version: '2018-09-20',
  url: 'YOUR-URL',
  disable_ssl_verification: true
});