Silverlight和SSL客户端证书

时间:2010-06-30 00:36:33

标签: silverlight web-services ssl ssl-certificate x509certificate

有人能指出我如何在Silverlight上使用SSL客户端证书来访问一个宁静的Web服务吗?

我似乎找不到任何关于如何处理它们的信息,甚至是否支持它们。

干杯。

4 个答案:

答案 0 :(得分:1)

这取决于您使用的是浏览器HTTP堆栈还是客户端HTTP堆栈。客户端堆栈不支持客户端证书,期间。如果您愿意接受其他限制(缺乏对所有HTTP动词的支持,强制响应状态代码等),浏览器堆栈会自动完成。

然而,我在OOB场景中使用带有客户端证书的浏览器堆栈时遇到了问题。 Prism模块加载在这些条件下失败 - 请求到达IIS,但没有明显原因导致500服务器错误。如果我将IIS设置为忽略客户端证书,或者我在浏览器中运行应用程序,它可以正常工作: - /

答案 1 :(得分:1)

Slipjig提到了这个:

“如果您愿意接受其他限制(缺乏对所有HTTP动词的支持,强制响应状态代码等),浏览器堆栈会自动完成。”

如果您可以接受,请查看Microsoft如何使用自定义X-HTTP-Method标头在其某些API中处理此问题,例如他们如何为WCF和OData执行此操作:

http://www.odata.org/developers/protocols/operations

在MSDN中,Microsoft还提到了将REST与SharePoint 2010的基于WCF的REST API结合使用的问题:

msdn.microsoft.com/en-us/library/ff798339.aspx

“在实践中,许多防火墙和其他网络中介阻止除GET和POST之外的HTTP谓词。要解决此问题,WCF数据服务(和OData标准)支持称为”动词隧道“的技术。 ,PUT,DELETE和MERGE请求作为POST请求提交,X-HTTP-Method标头指定收件人应该应用于请求的实际动词。有关详细信息,请参阅MSDN和OData上的X-HTTP-Method :OData网站上的操作(通过POST部分的方法隧道)。“

Don Box也有一些关于此的话,但具体是关于GData:

www.pluralsight-training.net/community/blogs/dbox/archive/2007/01/16/45725.aspx

“如果我正在构建一个GData客户端,我真的很想知道为什么我一直在使用DELETE和PUT方法,因为X-HTTP-Method-Override将在更多的情况/部署中起作用。”

有一篇关于Silverlight和Java互操作的文章,它也通过给出相同的建议来解决Silverlight的这种限制:

www.infoq.com/articles/silverlight-java-interop

“Silverlight仅支持GET和POST HTTP方法。某些防火墙限制使用PUT和DELETE HTTP方法。

重要的是要指出,只能使用GET和POST HTTP方法创建真正的RESTful服务(符合上面列出的所有REST原则),换句话说,REST架构不需要特定的HTTP映射。 Google的GData X-Http-Method-Override标头就是这种方法的一个例子。

如果Web服务解释了POST上的X-HTTP-Method-Override标头,则可以在标头中设置以下HTTP方法覆盖以完成PUT和DELETE操作:

* X-HTTP-Method-Override: PUT
* X-HTTP-Method-Override: DELETE"

希望这会有所帮助 -Josh

答案 2 :(得分:0)

看看这个。

http://support.microsoft.com/kb/307267

只需将您的网址更改为https

即可

希望这会有所帮助

答案 3 :(得分:0)

Dim url As Uri = New Uri(Application.Current.Host.Source, "../WebService.asmx")
Dim binding As New System.ServiceModel.BasicHttpBinding
If url.Scheme = "https" Then
    binding.Security.Mode = ServiceModel.BasicHttpSecurityMode.Transport
End If

binding.MaxBufferSize = 2147483647 'this value set to override a bug, 
binding.MaxReceivedMessageSize = 2147483647 'this value set to override a bug,
Dim proxy As New ServiceReference1.WebServiceSoapClient(binding, New ServiceModel.EndpointAddress(url))
proxy.InnerChannel.OperationTimeout = New TimeSpan(0, 10, 0)