当前位置: 首页 > 面试题库 >

如何通过Android访问SSL连接?

都阳
2023-03-14
问题内容

我开始按照Android所没有使用的教程进行操作,并得到以下信息:

    System.setProperty("javax.net.ssl.trustStore", "truststore");
    System.setProperty("javax.net.ssl.trustStorePassword", "password");

    SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();
    try {
        Socket s = ssf.createSocket("192.168.2.11", 6543);
        PrintWriter out = new PrintWriter(s.getOutputStream());
        while (true){
            out.println("SSL TEST");
            Log.d("DATA", "DATA SENT");
        }



    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我想这可以归结为几个问题:

  1. 我没有创建自己的信任库,但是在网上搜索教程和其他内容时,不确定如何创建信任库。有没有一种方法可以创建或修改信任库以在其中存储所需的证书?(如果有任何不同,我使用的是自签名证书)

  2. 如何使SSL握手顺利进行?现在,我得到的错误是:

    javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。
    

老实说,我真的不明白这意味着什么。

  1. 我需要在Android设备上修改哪些设置或文件,以确保可以进行此连接?

问题答案:

1)视情况而定。您在服务器端是否具有自签名证书,并且正在尝试向Android设备验证身份?还是您在Android方面尝试验证您对服务器的身份?如果是前者,则请参阅此链接:http
:
//www.codeproject.com/KB/android/SSLVerification_Android.aspx?display=Mobile

您要特别注意其在KeyStore文件中的位置。

2)之所以收到该错误,是因为它不信任您正在连接的服务器,或者是因为您没有正确创建信任库,或者是要连接到其证书尚未添加到信任库的服务器。您到底想连接什么?

3)确保您<uses-permission android:name="android.permission.INTERNET" />在manifest.xml中。

编辑 我的道歉,请查看我对第一段所做的更改。

这是初始化密钥库和信任库的部分

SSLcontext sslContext = SSLContext.getDefault();

KeyStore trustSt = KeyStore.getInstance("BKS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
InputStream trustStoreStream = this.getResources().openRawResource(R.raw.truststore);
trustSt.load(trustStoreStream, "<yourpassword>".toCharArray());
trustManagerFactory.init(trustStre);

KeyStore keyStore = KeyStore.getInstance("BKS");
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
InputStream keyStoreStream = this.getResources().openRawResource(R.raw.keystore);
keyStore.load(keyStoreStream, "<yourpassword>".toCharArray());
keyManagerFactory.init(keyStore, "<yourpassword>".toCharArray());

sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);


 类似资料:
  • 我将数据插入到多个表中,我使用mybatis组件来实现这一点。在插入数据之前,我还需要创建一个临时表。高层概述如下: 获取要插入的数据 步骤2到5应该是他们自己的单一事务,以防出现故障。我现在有这个: CreateTmpLinksTable需要有权访问当前连接,这样临时表的创建就不会在不同的事务中发生(如果有关系,以PostgreSQL为目标)。 我目前有: 我也没有设置我的交易管理器。我怀疑我必

  • 我的应用程序允许用户截取屏幕截图,然后发送到服务器。 在真正的设备上,屏幕截图保存在中,这样就可以了。 但是在模拟器上,当我点击截屏按钮(位于模拟器旁边的面板中)时,截屏被保存到我的计算机中,但是我在模拟器的文件系统中找不到它>目录存在,但子目录不存在。 是否有任何方法可以访问模拟器上的屏幕截图图像,或者有其他方法获取屏幕截图?

  • 我看了一些其他帖子,试图复制他们所做的,但他们似乎都没有遇到与我相同的问题。基本上,我试图存储S3存储桶中的密钥列表,以便在我的Vue应用程序中迭代它们。我有下面的代码,你可以看到我有3个控制台。记录我试图打印文件值的语句。第一个完全按照我的预期打印,而第二个打印,而第三个根本不打印。因此,出于某种原因,它没有将文件的值持久化到s3之外。listObjectsV2()函数,这意味着我无法访问应用程

  • 问题内容: 我试图弄清楚如何使用JavaFx。我在Scene Builder中构建了应用程序界面。但是我无法访问该组件,因为所有组件都已加载到Parent中。 如果我在“ Pane”上更改“ Parent”,则可以访问getChildren(),但是如果我知道fx:id …,还不清楚如何获得控制权。 问题更简单。我在Scene Builder中添加了Label或TextField。如果我知道fx:

  • 问题内容: 是否可以通过注释处理器访问带有注释的元素? 是否可以通过注释处理器访问带注释的类型边界? 高度赞赏我错过的相关文档的链接。 内容: 注释: 一个示例类: 处理器: 在classpath 上使用编译以上内容将显示消息,但永远不会调用该方法。当方法参数中存在注释时,使用注释向处理器添加另一个注释可以正常工作。如果方法参数带有注释,则过程将再次忽略该元素。 问题答案: 该注释是有点棘手,因为

  • 我正在尝试使用三个虚拟机(Master–10.x.x.4、Node1–10.x.x.150、Node2–10.x.x.160)创建Kubernetes集群。 我能够通过此链接成功创建留言簿应用程序:http://kubernetes.io/v1.0/examples/guestbook/.我只对frontend-service.yaml做了一个更改:使用NodePort。我可以使用节点IP和端口号