Silverlight安全问题:自签名证书

时间:2010-11-18 23:44:47

标签: silverlight security silverlight-4.0 internet-explorer-8 cross-domain

我在两种情况下使用silverlight 4应用程序。

场景1:同一台计算机上的Silverlight和RPC

  1. 在文件系统的网页上托管运行,Silverlight XAP也在文件系统上:

    C:\Silverlight\FSSilverlightApp\bin\Debug\SilverlightApplication2TestPage.html
    
  2. 连接到localhost上的网站,正在访问:

    https://localhost/rpc/someMethod
    
  3. 这是两个独立的URI,因此浏览器会检测并立即请求(通过提琴手跟踪):

    https://lcoalhost/clientaccesspolicy.xml 
    

    成功返回:

    <?xml version="1.0" encoding="utf-8"?> 
    <access-policy>
        <cross-domain-access>
            <policy>
              <allow-from http-request-headers="*">
                <domain uri="http://*"/>        
                <domain uri="https://*" /> 
              </allow-from>
              <grant-to>
                <resource path="/" include-subpaths="true"/>
              </grant-to>
            </policy>   
       </cross-domain-access> 
    </access-policy>
    
  4. 然后应用程序可以发出rpc请求(通过fiddler观察)

    一切都很好。如果我将远程主机更改为本地计算机名称而不是localhost,那么也可以正常工作。

  5. 场景2:本地计算机上的Silverlight和RPC是远程的

    1. 在此方案中,我使用其他桌面访问方案1中使用的同一RPC服务器。
    2. Silverlight启动,没有请求:clientaccesspolicy.xml
    3. Fiddler显示正在建立大量的https隧道,但我的机器和远程服务器之间没有通信。
    4. 返回以下安全例外:

      System.Security.SecurityException ---> System.Security.SecurityException: Security error.
         at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResultasyncResult)
         at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(ObjectsendState)
         at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
         --- End of inner exception stack trace ---
         at Microsoft.FSharp.Control.WebExtensions.AsyncGetResponse@1781-1.Invoke(Exception _arg1023)
         at Microsoft.FSharp.Control.AsyncBuilderImpl.callA@736.Invoke(AsyncParams`1 args)
      

      我认为这是一个IE配置问题。我尝试在方案1中设置机器,作为Internet Explorer内部的可信站点,但似乎不起作用......这必须是自签名或不匹配的证书问题。有什么想法吗?

      使用:IE 8和Windows 7

      思想?

1 个答案:

答案 0 :(得分:0)

我使用Fiddler坐在sliverlight客户端和服务器之间。为了使其正常工作,我需要导出fiddler证书(tools \ fiddlerOptions \ https)并在本地安装它作为根证书颁发机构。