Проблема безопасности Silverlight: самоподписанный сертификат - PullRequest
1 голос
/ 19 ноября 2010

Я использую приложение silverlight 4 в двух сценариях.

Сценарий 1: Silverlight и RPC на одной машине

  1. Будучи запущенным на веб-странице в файловой системе, Silverlight XAP также находится в файловой системе:

    C:\Silverlight\FSSilverlightApp\bin\Debug\SilverlightApplication2TestPage.html
    
  2. Подключение к веб-сайту на локальном хосте, доступ к которому:

    https://localhost/rpc/someMethod
    
  3. Это два отдельных URI, поэтому браузер обнаруживает и сразу же запрашивает (отслеживание через fiddler):

    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, это тоже хорошо работает.

Сценарий 2: Silverlight на локальном компьютере и удаленный RPC

  1. В этом сценарии я использую другой рабочий стол для доступа к тому же серверу RPC, который использовался в сценарии 1.
  2. Silverlight запускается, и запрос на: clientaccesspolicy.xml не выполняется
  3. Fiddler показывает тонну устанавливаемых туннелей https, но нет связи между моей машиной и удаленным сервером.

Возвращается следующее исключение безопасности:

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 голосов
/ 19 ноября 2010

Я использовал Fiddler, чтобы сидеть между клиентом и сервером. Чтобы это работало правильно, мне нужно было экспортировать сертификат fiddler (tools \ fiddlerOptions \ https) и установить его локально в качестве корневого центра сертификации.

...