2012-11-28 227 views
0

尽管试图阻止所有安全措施,我希望我的客户端接受自己签署的X.509证书,例如服务器中的证书。我正在使用WP8 SKD和Bouncy Castle for Windows Phone的C#绑定,名为bouncywp7.1,因此大多数类/方法都可用。TLS连接:覆盖证书验证

这在Android中完成的方式是创建我自己的证书信任管理器并使其对所有证书返回true。

public static void allowAllSSL() 
{ 
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
     @Override 
     public boolean verify(final String hostname, final SSLSession session) { 
      return true; 
     } 
    }); 
    SSLContext context = null; 
    try { 
     context = SSLContext.getInstance("TLS"); 
     context.init(null, sTrustManagers, new SecureRandom()); 
    } catch (final NoSuchAlgorithmException catchException) { 
     LoggerFactory.consoleLogger().printStackTrace(catchException); 
    } catch (final KeyManagementException catchException) { 
     LoggerFactory.consoleLogger().printStackTrace(catchException); 
    } 
    mFakeFactory = context.getSocketFactory(); 
    HttpsURLConnection.setDefaultSSLSocketFactory(mFakeFactory); 
} 

什么是做在Windows Phone 8的相同的痛苦最少的方式是什么?

+0

如果你要downvote至少你能提供什么不对的问题的一些反馈。 –

回答

7

AFAIK你不能在WP8上欺骗SSL。你要么使用SSL,要么你不是。你不能重写证书验证(或者至少我从来没有听说过)。

如果您使用的是SSL,并且您希望使用自定义证书,则用户应该是安装该证书的用户。例如通过向用户发送cer文件,让用户通过设置屏幕加入您的组织,甚至通过使用Luncher.LaunchFileAsync()作为CER文件从您的应用程序加入。

例如,如果包括FiddlerRoot.cer在您的项目(与生成操作=内容),您可以要求用户用下面的代码片段安装:

private async void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     Launcher.LaunchFileAsync(await Package.Current.InstalledLocation.GetFileAsync("FiddlerRoot.cer")); 
    } 

运行这段代码片段显示了下面的对话,以用户:

Install Certification confirmation dialogue

+0

这是一个不重要的证书验证和似乎工作,所以很荣幸给你,先生:D –