2017-07-24 95 views
0

在Azure中,我有一个云服务和一个尝试使用第三方api'https://api.txtlocal.com/send/'的webjob允许我们从应用程序发送SMS消息。访问第三方api的Azure webjob无法建立信任关系数据库

这一直工作正常,但最近对API的调用已与下面的错误而失败:

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure

在接触TextLocal支持,他们说,一些其他客户报告了这个问题,它是什么与他们的SSL证书的Thawte证书链相关。

提供的解决方案是为我更新我们服务器中的Thawte根证书。 (在台式机上自动更新,因此当我在本地运行作业时,它总是有效。)因此,我远程访问了Azure云服务虚拟机,更新了商店中的证书,并且按预期开始工作。

但现在它又突然停止了工作。微软的支持已经告诉我,这个解决方案无论如何都不会长久,因为他们每个月都会更新虚拟机,并且我对证书所做的任何更改都可能会被覆盖。

所以,我的问题是,除了覆盖SSL检查,我能做些什么来确保api的调用始终工作?

在此先感谢您的帮助。

回答

0

覆盖SSL检查将不是一个干净的解决方案。我建议您在Cloud Service中编写一个启动脚本,它将在每次启动时在Cloud Service VM上安装Thawte根证书。

因此,您将不得不创建安装证书的脚本(.cmd/.ps)。您可以将此证书与您的应用绑定或从Thawte下载到云服务虚拟机上。

完成上述操作后,您可以编写一个启动任务,它将调用上述脚本。您将不得不在高架模式下运行此模式才能使其工作。

这里是如何运行的启动任务的文档:How to configure and run startup tasks for a cloud service

下面是一个简单的启动任务:

<Startup> 
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple"> 
     <Environment> 
      <Variable name="MyVersionNumber" value="1.0.0.0" /> 
     </Environment> 
    </Task> 
</Startup> 

您可以在该文件中,您在启动过这样的事情任务:

certmgr.exe -add MyCert.cer -s -r localMachine root 

请参阅本关于如何通过证书部署命令行的更多信息:Deploy a Certificate by Using the Command Prompt

或者,如果您想探索PowerShell,则可以参考文档Import-Certificate

+0

嗨,谢谢你的回答。然而,这个解决方案要求我在Thawte证书更改时“知道”,下载并重新发布我的服务和webjob。即使我们使用Azure环境作为PAAS,我不明白为什么我们必须做任何事情,因为这些证书不属于我们,也不属于我们的基础设施。 – Hari

+0

同意。但不幸的是,您的应用程序依赖于该CA证书。在某个时间点,证书可能会添加为Windows Update的一部分。然而在那之前,这是我能想到的解决方案。 您可能可以向微软提出支持凭单以获得一些支持。 –

相关问题