实现通过 SSL 使用 Web 服务的 C# 客户端?

2024-04-09

因此,我将 ServiceReference 添加到 C# 控制台应用程序中,该应用程序调用从 Oracle 公开的 Web 服务。

我已经完成了所有设置,当它不使用 SSL (http) 时,它的工作方式就像桃子一样。我现在尝试使用 SSL 进行设置,但在将其添加到服务引用(甚至 Web 引用)时遇到了问题。例如,当我尝试将服务所公开的 URL (https) 添加到 Visual Studio 中时,它不会返回适当的 Web 方法。

底层连接已关闭:发送时发生意外错误。 从传输流接收到意外的 EOF 或 0 字节。 元数据包含无法解析的引用:'https://srs204.mywebsite.ca:7776/SomeDirectory/MyWebService?WSDL https://srs204.mywebsite.ca:7776/SomeDirectory/MyWebService?WSDL'

我遇到的另一个难题是证书管理和部署。我有大约 1000 个外部客户端站点需要使用这个小实用程序,并且它们需要将证书安装在适当的证书存储中才能连接到 Web 服务。不确定处理这个问题的最佳方法。它们需要位于根存储中吗?

我在网上花了相当多的时间查看各种选项,但在任何地方都找不到一个好的、干净的答案。

总而言之,我有几个问题:

1) 有人有一些关于在 Visual Studio 中设置使用 SSL 的 Web 服务的好链接吗?

2) 我该如何注册证书?它应该存在于哪个商店?我可以使用 CertMgr 之类的东西来注册它吗?

一定有一本好书/教程/任何可以向我展示设置此类内容的常见良好实践的东西。我只是似乎找不到它!


嗯,我已经弄清楚了。我花了比我想谈论的时间更长的时间,但我想分享我的解决方案,因为看到这个标准是我非常讨厌的。 “哦,我修好了!谢谢!”帖子让每个人都对实际发生的事情抱有疑问。

So.

根本问题是,默认情况下 Visual Studio 2008 使用 TLS 进行 SSL 握手,而我尝试连接的基于 Oracle/Java 的 Web 服务使用的是 SSL3。

当您在 Visual Studio 2008 中使用“添加服务引用...”时,您已经无法指定安全协议 http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/37c376a3-f50c-4b57-a1df-83dc43fcddbf对于服务点管理器应该是 SSL3。

Unless.

您获取一个静态 WSDL 文档并使用wsdl.exe生成代理类 http://gsraj.tripod.com/dotnet/webservices/webservice_csharp_client.html.

wsdl /l:CS /protocol:SOAP /namespace:MyNamespace MyWebService.wsdl

然后您可以使用C 夏普编译器 http://msdn.microsoft.com/en-us/library/1700bbwd(VS.80).aspx将该代理类转换为库 (.dll) 并将其添加到您的 .Net 项目“参考”中。

csc /t:library /r:System.Web.Services.dll /r:System.Xml.dll MyWebService.cs

此时,您还需要确保您的“参考”中也包含了 System.Web.Services。

现在您应该能够调用您的 Web 服务,而代码不会出现问题。为了做到这一点work在实例化服务之前,您需要添加一行神奇的代码。

// We're using SSL here and not TLS. Without this line, nothing workie.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

好吧,我对自己印象非常深刻,因为在我的开发盒上进行的测试非常棒。然后我部署到另一个客户端盒子,由于权限/权限问题,它不会再次连接。对我来说,这闻起来像证书(不管它们闻起来像什么)。为了解决这个问题,我使用 certmgr.exe http://msdn.microsoft.com/en-us/library/aa388161(VS.85).aspx将站点的证书注册到本地计算机上的受信任根。

certmgr -add -c "c:\someDir\yourCert.cer" -s -r localMachine root

这允许我将证书分发到我们的客户端站点并自动为用户安装。我仍然不确定不同版本的 Windows 在像这样的自动证书注册方面有多“安全友好”,但到目前为止效果很好。

希望这个答案对一些人有帮助。也感谢 Blowdart 在这方面提供的所有帮助并提供了一些见解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现通过 SSL 使用 Web 服务的 C# 客户端? 的相关文章

随机推荐