Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TLS连接:覆盖证书验证_C#_Ssl Certificate_Bouncycastle_Ssl_Windows Phone 8 - Fatal编程技术网

C# TLS连接:覆盖证书验证

C# TLS连接:覆盖证书验证,c#,ssl-certificate,bouncycastle,ssl,windows-phone-8,C#,Ssl Certificate,Bouncycastle,Ssl,Windows Phone 8,尽管尝试了所有的安全措施,我还是希望我的客户端接受自签名的X.509证书,就像我们服务器上的证书一样。我使用的是WP8 SKD和BouncyCastle for Windows Phone的C绑定,名为bouncywp7.1,因此它的大多数类/方法都是可用的 在Android中实现这一点的方法是创建我自己的证书信任管理器,并使所有证书都返回true public static void allowAllSSL() { HttpsURLConnection.setDefaultHostn

尽管尝试了所有的安全措施,我还是希望我的客户端接受自签名的X.509证书,就像我们服务器上的证书一样。我使用的是WP8 SKD和BouncyCastle for Windows Phone的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上执行相同操作最不痛苦的方法是什么?

如果您无法在WP8上欺骗SSL。您要么使用SSL,要么不使用SSL。您不能覆盖证书验证,或者至少我从未听说过它

如果您正在使用SSL,并且希望使用自定义证书,则安装该证书的用户应该是用户。e、 g.通过向用户发送cer文件的电子邮件,通过设置屏幕让用户加入您的组织,甚至通过使用午餐器.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"));
    }
运行此代码段会向用户显示以下对话框:


如果你要投否决票,至少你可以就这个问题的错误提供一些反馈。这和覆盖证书验证一样是一个糟糕的黑客行为,而且似乎很有效,所以先生,你很荣幸