0

尽管尝试了所有安全措施,但我希望我的客户接受像我们服务器中的那样的自签名 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 上做同样的事情最不痛苦的方法是什么?

4

1 回答 1

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"));
    }

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

安装认证确认对话框

于 2012-11-29T02:26:54.947 回答