2012-11-28 201 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 –