访问第三方API的Azure webjob无法建立信任关系

时间:2017-07-24 12:18:47

标签: c# azure ssl azure-webjobs azure-cloud-services

在Azure中,我有一个云服务和一个尝试使用第三方API https://api.txtlocal.com/send/'的webjob,允许我们从应用程序发送短信。

这已经正常工作,但是最近对api的调用失败了,出现以下错误:

  

System.Net.WebException:底层连接已关闭:可以   不建立SSL / TLS安全通道的信任关系。 --->   System.Security.Authentication.AuthenticationException:远程   证书根据验证程序无效

在联系TextLocal支持后,他们说其他一些客户报告了这个问题,这与他们的SSL证书的Thawte证书链有关。

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

然而,现在,它突然又停止了工作。 Microsoft支持人员告诉我,解决方案无论如何都不会长时间工作,因为他们每个月都会更新VM,而且我对证书所做的任何更改都可能被覆盖。

所以,我的问题是,除了覆盖SSL检查之外,我还能做些什么来确保对api的调用始终有效?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

因此,您必须创建一个安装证书的脚本(.cmd / .ps)。您可以将此证书与您的应用程序捆绑在一起,也可以从Thawte下载到云服务VM上。

完成上述操作后,您可以编写一个启动任务,该任务将调用上述脚本。您必须在提升模式下运行它才能使其正常工作。

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

以下是启动任务示例:

{!! Form::open(['method'=>'GET','url'=>'needyStatus','class'=>'navbar-form navbar-left','role'=>'search'])!!}
  <div class="input-group custom-search-form">
    <input type="text" name="search" class="form-control">
    <span class="input-group-btn">
      <button type="submit" class="btn btn-default-sm">
        <i class="fa fa-search"></i>
      </button>
    </span>
  </div>
{!! Form::close() !!}
</div>
<tr>
  <hidden>
    @foreach($needy as $ned)
    {{$ned->cnic}}
    {{$ned->email}}
    '{{$ned->firstName}}
    @endforeach
  </hidden>
</tr>

您可以在启动任务中传递的文件中包含以下内容:

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

有关如何通过命令行部署证书的详细信息,请参阅此处:Deploy a Certificate by Using the Command Prompt

或者,如果您想要探索PowerShell,那么您可以参考Import-Certificate的文档。

相关问题