问题:函数应用程序在mac上托管Cosmos仿真器时出现了SSL验证上的错误。经过多次的尝试和研究,当我开发一个天蓝色功能应用程序时,我一直无法让它工作.
Azure声称:对于Azure来说,不为Mac提供本机Cosmos DB仿真器的解决方法是,当应用程序在Mac中编写时,模拟器可以使用类似于的虚拟机管理程序托管在windows上。
我的设置是什么?1机器2操作系统独立运行。
在Mac (主机)上:
在VM (Mac上的客服机)上:
Mac主机能够与来宾VM通信,反之亦然,没有问题。VM有自己的IP地址。
下面是Azure文档所做的工作:
模拟器在VM唯一IP地址下自动生成自签名证书.证书被正确地导出,并导入到Mac的KeyChain访问中。虽然cosmos DB仿真程序的资源管理器可以在Safari中呈现(在接受浏览器中的cert之后),而MAC可视化演播室代码上的Cosmos DB扩展可以连接到模拟器(创建DB和容器、手动插入记录等),但函数应用本身在执行函数应用程序时拒绝连接,表示SSL证书没有通过验证。
Cosmos的连接字符串在函数应用程序的local.setting.json上被更改为(在VM中使用默认AccountKey的IP地址):
AccountEndpoint=https://10.37.129.3:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==Cosmos模拟器在CMD上使用以下命令运行:
Microsoft.Azure.Cosmos.Emulator.exe /AllowNetworkAccess /Key=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==windows机器关闭了防火墙。
函数应用程序使用CosmosDB 绑定。它没有使用成熟的Cosmos DB或Cosmos。
但是,我不知道如何从函数App中通过SSL验证。
与此问题相关的任何解决方案(或类似的)似乎都用于运行成熟的Cosmos DB SDK或Cosmos DB REST,其中您需要向DocumentClient构造器提供一个HttpClientHandler,该构造器有自己的ServerCertificateCustomValidationCallBack实现。这适用于C#。对于节点,在调用process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;之前添加此https.request()。类似地,对于Node,有一个名为DisableSSLVerification的标志,当设置为false时,它应该再次传递SSL verification...But,在一个函数应用程序上,我们没有机会这样做。后台的Azure提供运行函数应用程序代码的服务器,并为您调用DocumentClient .我们不实例化宇宙数据库实例或设置Node.js服务器来运行我们的代码.
其他尝试过的解决方案:调整后的Visual代码关闭代理严格SSL。
有人能解决这个问题吗.似乎我唯一的选择是重构函数应用程序代码,忽略轻松的Cosmos DB函数应用程序绑定。从微软看来,这似乎是错误的,而且由于绑定是与Cosmos DB通信的最简单的方式,这是相互矛盾的。
谢谢你,-JM
发布于 2019-12-19 00:07:59
Cosmos DB绑定隐藏了更改SSL证书配置的可能性,因此无法更改该配置。它旨在简化最常见的场景,但您要实现的场景需要一些高级更改,这不仅仅是一个运行在云中试图连接到Cosmos DB实例的函数。在一个正常的场景(运行在云上的函数)中,您永远不希望禁用SSL。
您可以选择使用您自己定制的SDK客户端,只需确保将实例维护为全局/静态:https://learn.microsoft.com/azure/azure-functions/manage-connections#cosmosclient-code-example-javascript
https://stackoverflow.com/questions/59395827
复制相似问题