TLS连接:覆盖证书验证

MLP*_*CiM 0 c# ssl bouncycastle ssl-certificate windows-phone-8

尽管尝试了所有安全措施,我希望我的客户端接受自签名的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);
}
Run Code Online (Sandbox Code Playgroud)

在Windows Phone 8上执行相同操作的最不痛苦的方法是什么?

Jus*_*gel 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"));
    }
Run Code Online (Sandbox Code Playgroud)

运行此代码段会向用户显示以下对话框:

安装认证确认对话