在SSIS脚本任务中使用客户端证书进行Web服务调用,导致SSL / TLS问题

时间:2017-01-18 19:25:51

标签: c# ssl ssis

我有一个SSIS包,我在其中发出Web服务请求并检索一些数据。 API提供商要求出于安全原因提交客户证书以及请求。

如果我从VS Shell(甚至是VS控制台应用程序)运行程序包,我可以完全正常工作但是当我部署它并通过SQLAgent运行程序包,从SSMS解雇它时,我收到以下错误:

  

System.ServiceModel.Security.SecurityNegotiationException:无法   为权威人士建立SSL / TLS安全通道   ' mywebservice.com/endpoint:6185&#39 ;. ---> System.Net.WebException:The   请求已中止:无法创建SSL / TLS安全通道。 at   System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
  在   System.ServiceModel.Channels.HttpChannelFactory' 1.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult的   结果)---内部异常堆栈跟踪结束--- at   System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)
  在   System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult   结果)在   System.ServiceModel.Channels.ServiceChannel.EndCall(String action,   对象[]出,IAsyncResult结果)at   System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator<> c__DisplayClass5' 1.b__4(IAsyncResult的   asyncResult)at   System.Threading.Tasks.TaskFactory' 1.FromAsyncCoreLogic(IAsyncResult的   iar,Func 2 endFunction,Action' 1 endAction,Task' 1 promise,Boolean   requiresSynchronization)   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()   在   ST_1ccd678422b8432a8ea14ce911c575f3.Myclass<> c__DisplayClass39< b__22> d__55.MoveNext()

我将作业运行为NT SERVICE\SQLAgent$Instance,并且证书已放置在以下商店的本地计算机中:个人,受信任的根证书颁发机构和受信任的人员。这似乎不是问题,因为当我通过VS shell / Data Tools进行调试时,我可以使用它来处理任何这些问题。

我提前感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

通过执行以下操作解决了这个问题:

  1. 将作业所有者设为sa
  2. 在SQL Server代理下创建代理帐户 - >代理 - > SSIS包执行并将Principal设置为我的SQL登录(域)帐户。还在Principal下添加了SQLAgent Reader,User和Operator角色。
  3. 通过将SQL Server代理服务帐户更改为新的代理帐户
  4. 更新了SSIS作业步骤

    希望这有助于其他人。