我一直在使用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));
});
答案 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
});