我创建了一个新的azure存储帐户。在其中我有一个blob容器,其访问类型设置为'private'。以下是我尝试创建容器的nodejs代码。
var azure = require('azure-storage');
var accountName = "xxxxxxxxxx";
var accessKey = "veryLongAccessKey";
var host = "https://abc.blob.core.windows.net";
var blobSvc = azure.createBlobService(accountName, accessKey, host);
blobSvc.createContainerIfNotExists('myblobContainer', function(error, result, response) {
console.log("error");
console.log(error);
console.log("result");
console.log(result);
console.log("response");
console.log(response);
});
当我执行此代码时,我得到以下错误。
{ Error: unable to verify the first certificate
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:1062:38)
at emitNone (events.js:86:13)
at TLSSocket.emit (events.js:185:7)
at TLSSocket._finishInit (_tls_wrap.js:586:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:416:38) code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }
我错过了什么?
答案 0 :(得分:2)
openssl s_client -connect {StorageAccount}.blob.core.windows.net:443 \
-servername {StorageAccount}.blob.core.windows.net
表示:
Certificate chain
0 s:/CN=*.blob.core.windows.net
i:/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation
/OU=Microsoft IT/CN=Microsoft IT SSL SHA2
1 s:/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation
/OU=Microsoft IT/CN=Microsoft IT SSL SHA2
i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
你可能错过了巴尔的摩根CA.
可能的原因:
您的Node的CA捆绑包中缺少证书,并且链验证失败。不熟悉Node如何处理其CA捆绑包,但值得进行研究
你的TLS中有一些东西(小提琴手或其他一些中间人TLS 检查员)
可以找到使用ssl-root-cas
的解决方法here(如果您无法跟踪根本原因)。
答案 1 :(得分:0)
当尝试从公司的网络(防火墙和代理服务器)连接到Azure存储blob并尝试关闭SSL验证时,我遇到了一些SSL验证问题。
const myRequest = require('request').defaults({strictSSL: false})
别忘了在最后重新启用此功能。 尽管此方法暂时有效,但这是一种解决方法/脏污修复方法,而不是解决方案。