尽管尝试了所有安全措施,但我希望我的客户端接受自签名的X.509证书,就像我们服务器中的证书一样。我正在使用WP8 SKD以及用于Windows Phone的Bouncy Castle的C#绑定,名为bouncywp7.1,因此大多数类/方法都可用。
在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 :(得分:7)
AFAIK你不能在WP8上欺骗SSL。您要么使用SSL,要么不是。你无法覆盖证书验证(或者至少我从未听说过)。
如果您使用的是SSL,并且希望使用自定义证书,那么用户应该是安装它的人。例如通过向用户发送cer文件,让用户通过设置屏幕加入您的组织,甚至通过使用Luncher.LaunchFileAsync()来获取CER文件。
例如,如果在项目中包含FiddlerRoot.cer(使用Build Action = Content),您可以要求用户使用以下代码段安装它:
private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
Launcher.LaunchFileAsync(await Package.Current.InstalledLocation.GetFileAsync("FiddlerRoot.cer"));
}
运行此代码段会向用户显示以下对话框: