当前位置: 首页 > 知识库问答 >
问题:

使用SSLCertificateSocketFactory支持Android HTTPS SNI

郭瀚海
2023-03-14
           final SSLCertificateSocketFactory sslSocketFactory = (SSLCertificateSocketFactory) SSLCertificateSocketFactory.getDefault(0);

            socket = (SSLSocket) sslSocketFactory.createSocket(InetAddress.getByName("theserver"), 443);


            socket.setEnabledProtocols(socket.getSupportedProtocols());

            String[] cipherArray = socket.getEnabledCipherSuites();
            for(int i = 0; i<cipherArray.length; i++) {
                Log.e("","Available Cipher:"+cipherArray[i]);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                sslSocketFactory.setHostname(socket, "thehostname");
            } else {
                try {
                    java.lang.reflect.Method setHostnameMethod = socket.getClass().getMethod("setHostname", String.class);
                    setHostnameMethod.invoke(socket, "thehostname");
                } catch (Exception e) {
                    Log.w("", "SNI not useable", e);
                }
            }
            socket.setSoTimeout(20000);
            socket.setUseClientMode(true);
            Log.i(getClass().toString(), "Connected.");
            socket.startHandshake();
            SSLSession session = socket.getSession();
            boolean secured = session.isValid();

现在sslcontext返回SSLSOCKETFACTORY,我想使用SSLCertificateSocketFactory(对于sethostname方法)做什么..我希望问题是清楚的,如果不是让我知道或者随意说的更清楚

共有1个答案

太叔逸春
2023-03-14

在使用包括SNI支持的Android的HttpSurlConnection时,可以使用NetCipher库获得现代TLS配置。NetCipher将HttpSurlConnection实例配置为使用支持的最佳TLS版本以及该TLS版本的最佳密码套件。首先,将其添加到您的构建中。Gradle:

compile 'info.guardianproject.netcipher:netcipher:2.0.0-alpha1'

或者您可以下载NetCipher.jar并将其直接包含在您的应用程序中。则不是调用:

HttpURLConnection connection = (HttpURLConnection) sourceUrl.openConnection();

称之为:

HttpsURLConnection connection = NetCipher.getHttpsURLConnection(sourceUrl);
 类似资料:
  • 我有一个restful web服务,支持HATEOAS链接。当我打电话时“http://localhost:8080/v1/bookings/1225380?lock=true“链接我得到了以下资源URL。我想将这些超媒体与我的Angular2应用程序(最近升级到最终版本)集成。我发现很少有资源是在Angular1支持下实现的(链接-https://paulcwarren.wordpress.co

  • 我需要在Android 2中实现actionbar。我已经尝试了这篇文章,并按照这篇官方文章中提到的设置了支持库。 以下是我使用appcompat支持库实现ActionBar的步骤: 首先,我使用以下配置创建项目(我不创建图标和默认活动): 最低要求SDK: API 10: Android 2.3.3(姜饼) 目标SDK: API 19: Android 4.4 使用编译: API 10: And

  • Im使用CMake生成visual studio 2013解决方案。下一步我将尝试构建它,但出现以下错误: 构建NVCC(设备)对象模块/核心/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj nvcc致命:不支持的gpu体系结构“compute_11” 我尝试版本2.10和3.0与cu

  • 我正在使用openssl检查是否存在tlsv1。3是否支持域列表。我已经编写了脚本,但脚本没有停止,它会等待我按CTRL D键,然后给我一个结果。这是scirpt 我还将echo与openssl结合使用,如下所示 注意:当我在终端上为单个站点运行命令时,我得到的结果没有键入CRTL D,但当我在脚本中使用loop和if语句时,它会等待我按下CTRL D。这真的很奇怪。 我还尝试了echo“q”|

  • 24.3. 使用JDK Timer支持类 另外一个调度任务的途径是使用JDK Timer对象。更多的关于Timer的信息可以在这里http://java.sun.com/docs/books/tutorial/essential/threads/timer.html找到。 上面讨论的概念仍可以应用于Timer的支持。你可以创建定制的timer或者调用某些方法的timer。包装timers的工作由T

  • 问题内容: 我是Spring-Batch(和一般的Spring)的新手,并且一直在关注在线文档,以教自己如何完成此任务。我正在尝试连接到DB2数据库。 如果我这样声明XML的DB2连接: 然后将其加载到我的代码中,如下所示: 完美运作。如示例所示,我想如何使用DataSourceBuilder,所以最终我想去: 但是由于某种原因,它不起作用。我懂了 原因:java.lang.IllegalStat