[英]Error: unable to verify the first certificate in nodejs azure queue storage createMessage
I am trying to test my Azure Queue Storage on Azurite emulator on MacOS in a local environment.我正在尝试在本地环境中的 MacOS 上的 Azurite 模拟器上测试我的 Azure 队列存储。 I wrote a piece of code to send a message, which was to be viewed on Azure Storage Explorer.
我写了一段代码来发送一条消息,这是要在 Azure Storage Explorer 上查看的。 I am using the https connection string as stated in the Azurite documentation and have set up self-signed
rootCA.pem
certificate in Azure Storage Explorer.我正在使用Azurite 文档中所述的 https 连接字符串,并在 Azure 存储资源管理器中设置了自签名
rootCA.pem
证书。 However when I take my code in a file file.js
and run node file.js
.但是,当我将代码放入文件
file.js
并运行node file.js
时。 It gives me the following error message still.它仍然给我以下错误消息。 Does anyone know what I have done wrongly?
有谁知道我做错了什么? Let me know if more information is required.
如果需要更多信息,请告诉我。
file.js文件.js
'use strict';
const storage = require('azure-storage');
const queueService = storage.createQueueService("DefaultEndpointsProtocol=https;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=https://127.0.0.1:11000/devstoreaccount1;QueueEndpoint=https://127.0.0.1:11001/devstoreaccount1;");
queueService.messageEncoder = new storage.QueueMessageEncoder.TextBase64QueueMessageEncoder();
function testing() {
queueService.createMessage('emailv2', "Hello world", (error) => {
if (error) {
console.log('Error encountered when enqueueing welcome message', error);
console.log()
}
});
}
console.log(testing())
Error message错误信息
Error encountered when enqueueing welcome message Error: unable to verify the first certificate
at TLSSocket.onConnectSecure (_tls_wrap.js:1497:34)
at TLSSocket.emit (events.js:315:20)
at TLSSocket._finishInit (_tls_wrap.js:932:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:706:12) {
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
}
Regarding the error, it seems that the root certificate is missing from your Node's CA bundle then chain verify fails.关于该错误,您的节点的 CA 捆绑包中似乎缺少根证书,然后链验证失败。 I suggest you add the root certificate in your node runtime.
我建议您在节点运行时添加根证书。
For example例如
Configure Https for Azurite emulator为 Azurite 模拟器配置 Https
a.一个。 generate PEM file and Key file
生成PEM文件和Key文件
mkcert -install mkcert 127.0.0.1
b.湾。 Strat Azurite emulator with HTTPS
带有 HTTPS 的 Strat Azurite 仿真器
azurite --cert 127.0.0.1.pem --key 127.0.0.1-key.pem -s -l c:\azurite -d c:\azurite\debug.log --oauth basic
Code代码
//add the root certificate in your HTTP angent
const rootCas = require("ssl-root-cas").create();
rootCas.addFile("<the path of rootCA.pem>");
require("https").globalAgent.options.ca = rootCas;
const storage = require("azure-storage");
const queue = storage.createQueueService(
"DefaultEndpointsProtocol=https;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=https://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=https://127.0.0.1:10001/devstoreaccount1;"
);
// use our own HTTP anagent
queue.enableGlobalHttpAgent = true;
// the message encoding I use base64
queue.messageEncoder = new storage.QueueMessageEncoder.TextBase64QueueMessageEncoder();
queue.createMessage("test", "hello", (error) => {
if (error) throw error;
console.log("send sucessfully");
});
queue.getMessages("test", (error, serverMessages) => {
if (error) throw error;
console.log(serverMessages[0].messageText);
queue.deleteMessage(
"test",
serverMessages[0].messageId,
serverMessages[0].popReceipt,
(error) => {
if (error) throw error;
console.log("complete the message successfully");
}
);
});
For more details, please refer to here and here有关更多详细信息,请参阅此处和此处
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.