我有一种具有SSL能力的Web服务服务(使用OpenSSL)。 我想知道写一个简单的VB.NET客户访问这种基于HTTPS的服务的时候我至少需要知道的东西。 我已经用一份受信任的根证书在Web服务上签字,并且我已经在我的.NET客户端上安装了这个证书。 如果我仅仅简单地把URL 变为使用https: //....,我得到一个未知Web服务的异常。在我的简单的VB.NET客户端里我需要不同地来做什么?
Donald Flinn:有许多小事情能出错, 特别是当你正建立一个使用不同的安全协议的系统的时候,如同在你的情况中,使用.NET和OpenSSL。 在关于与SSL合作运行之前,我将建议慢慢的来前进。 有很多变量需要考虑。 例如:
客户和服务器必须支持相容的加密算法。
根证书必须能够为同等级的应用程序知道并且得到支持。
根证书或者链的位置一定能被客户端和服务认知。
如果送证书链,容器的类型,例如PKCS7,因为证书链必须被双方理解。
有跳转到OpenSSL的问题是它允许你改变全部这些和更多的选择。 确定哪些对你的客户是可接受的需要花费一些时间来挖掘。 另一个问题是SSL 协议在你的代码被运行之前就运行了,因此调试是困难的。
我建议你可以向后退一步, 使用微软的WSE一起来的示例代码来让你的代码跑起来,微软的示例代码可以从微软站点上下载获得。 看一下文档, "构建安全ASP.NET 应用程序:验证,授权和安全通信",这个文档也可以被从微软的MSDN 网站下载。这将给你建立一个SSL 连接的一步一步地指示。 如果你还没有使用它,我也建议你可以使用Visual Studio .NET 2003。
一旦你得到示例代码并且然后修改了来使用你的代码,你就开始转向OpenSSL的入门了。我不能确信, 你是否正使用OpenSSL 仅仅来建立你的证书同时使用.NET处理SSL,或者是否你已经合并OpenSSL作为你的服务过程中的安全的底层。 如果是前者,你的工作将更容易,因为大多数相容的问题已经被解决。 如果是后者那么你必须解决那些互不相容的问题,这是一个繁重得多的工作。
确保你正检查为从服务发送的证书的客户端的错误, 例如的:
l 如果并非x.trustedRoot,
l 如果并非x.validate
l 如果并非x.validName
你也能通过设置UseAuthentication = False关掉确认。 这将向你保证你得到证书,但是确认却失败了,这样又把我们带回到追踪任何的不兼容的问题上来了。 当然,系统是正在使用中的时候确认必须被打开并且能工作。 另一个大的告诫是,WSE是一个sdk并且因此还没被批准用于生产代码。
