在Windows Phone 8模拟器上找不到SSL证书

时间:2012-12-16 13:34:49

标签: ssl https ssl-certificate windows-phone windows-phone-8

我正在为WP8开发程序,它从JSON中检索数据。连接是安全的(url以https开头)。有时它工作正常,但有时我开始接收异常 System.Net.WebException: The remote server returned an error: NotFound. 此异常开始显示对所有https URL的所有请求。对于http URL,一切都很顺利。 URL正常,它在模拟器上的IE中打开。 我认为,证书可能存在问题,但有时为什么会有效?

public static void SendRequest(string requestUrl, Action<Stream, Exception> callback)
{
    var targetUri = new Uri(requestUrl);
    var request = (HttpWebRequest)WebRequest.Create(targetUri);
    request.Method = "POST";

    request.BeginGetResponse(ar => ProcessResponse(ar, callback), request);
}

public static void ProcessResponse(IAsyncResult callbackResult, Action<Stream, Exception> callback)
{
    try
    {
        var myRequest = (HttpWebRequest)callbackResult.AsyncState;
        var myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

        callback(myResponse.GetResponseStream(), null);

        myResponse.Close();
    }
    catch (Exception e)
    {
        callback(Stream.Null, e);
        Debug.WriteLine("Error in RequestHelper.ProcessResponse\nErrorMessage - " + e.Message);
    }
}

已更新:问题肯定在SSL证书中。当我试图在WebBrowser控件上打开网页时,我收到了一条消息 - “我们在使用此网站的安全证书时遇到了问题。”我点击了“继续浏览网站”,但没有任何改变。 该页面仍然可以通过IE在模拟器上打开。 我试图安装证书(从网站导出,并用IE下载。我收到消息,证书已成功添加。但我仍然在WebBrowser控件上有错误消息。 有没有办法安装证书?或者不检查它的有效性?

2 个答案:

答案 0 :(得分:1)

自签名证书工作正常,但您的证书中需要正确的通用名称(CN)。 CN必须与您的服务器域相同

并且您需要导入证书。到你的手机

答案 1 :(得分:0)

我在https与服务器通信的两个应用程序中遇到了同样的问题,但我还没有找到解决方法。但我砍了它。当我收到WebException: Remote server not found时,我会检查StatusCode ResponseStatus网络例外,如果Status不是RequestCancelled (你在快速应用切换中获得这样的状态)我重复请求。它看起来像这样:

var httpStatusCode = ((HttpWebResponse) webException.Response).StatusCode;
                if (httpStatusCode == HttpStatusCode.NotFound || 
                    httpStatusCode == HttpStatusCode.GatewayTimeout ||
                    httpStatusCode == HttpStatusCode.InternalServerError)
                {
                    if (webException.Status == WebExceptionStatus.UnknownError && !configuration.IsResending)
                    {
                        configuration.IsResending = true;
                        ResendRequest(configuration, successAction);
                        return;
                    }

                    configuration.IsResending = false;
                    throw new ServerTemporaryUnavailabeException();
            }

第二次执行请求时不会返回WebException: Not found