在C#中通过WCF访问需要证书的Web服务(HTTPS)

时间:2014-12-12 17:40:18

标签: c# .net web-services wcf ssl

我是客户端计算机,我正在尝试访问的服务器是一个程序,我将提供支持(我是一个新的第三方程序),然后我需要发送一些数据。< / p>

他们使用HTTPS,但我无法与此联系:

public void StartProcess() 
{
    BasicHttpsBinding binding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
    // - They said they don't require credentials

    EndpointAddress address = new EndpointAddress("https://www.outsideservice.com/services/C001");

    OutsideServiceClient client = new OutsideServiceClient(binding, address);

    DataToSend data = new DataToSend();
    // - Filling up whatever data I need to send, omitted

    try
    {
        client.StartProcess(data);
    }
    catch (Exception ex)
    {
        // ex = Could not establish trust relationship for SSL/TLS secure channel
    }
}

他们已经有其他第三方程序访问他们的服务器。 我对证书的工作方式不是很了解(MSDN的基本阅读除外)。

在质疑我如何访问他们的服务器之后,我收到了回复: “已经通过https访问我们的服务器,只需访问计算机,下载证书并在客户端计算机上使用。”

在搜索我如何执行此操作后,我尝试从here访问https://theirURL.com/certsrv,但我收到Resource Not Found错误。

从我可以理解的证书如何工作,我必须从他们那里获得证书,双击它,安装在我的机器上(或运行代码连接到他们的机器)是能连接好吗? 或者,为了能够连接,我有什么必须做的事情吗?

1 个答案:

答案 0 :(得分:0)

“我必须从他们那里获得证书,双击它,在我的机器上安装(或运行代码的机器连接到它们)才能连接到正确的位置?”

这是正确的做事方式,但是为了让事情顺利进行,你可以使用这段代码:

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

我通常喜欢将此包装在不适用于发布版本的代码中,以便生产实际上必须正确安装证书,如下所示:

#if (!Release)
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
#endif

我相信你应该能够把它放在任何你喜欢的地方,例如Global.asax.cs或者在调用之前。