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

使用自定义证书的Android https连接

史宸
2023-03-14

我的连接代码如下所示:

KeyStore ks = KeyStore.getInstance("PKCS12");
        ks.load(context.getResources().openRawResource(R.raw.gecko_cert_1), "gecko_cert_1".toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
        kmf.init(ks, "gecko_cert_1".toCharArray());
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(kmf.getKeyManagers(), null, null);


        //request
        URL serverURL = new URL(myurl); 
        HttpsURLConnection conn = (HttpsURLConnection)serverURL.openConnection();
        conn.setSSLSocketFactory(sc.getSocketFactory());
        //conn.setHostnameVerifier(DO_NOT_VERIFY);
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();

干杯,马尔辛

共有1个答案

易祖鹤
2023-03-14

现在对我管用了。

我在connection方法的顶部添加了以下代码片段:

       X509TrustManager[] tm = new X509TrustManager[] { new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        } };

然后换行:

sc.init(kmf.getKeyManagers(), null, null);
sc.init(kmf.getKeyManagers(), tm, null);
conn.setHostnameVerifier(DO_NOT_VERIFY);
 类似资料:
  • whistle会自动生成根证书,并根据根证书对每个请求动态生成https证书,如果需要用自定义的证书,甚至根证书,可以有两种方式(只支持 .crt 格式的证书): 把普通证书对 (如:test.crt 和 test.key、test2.crt 和 test2.key 等等) 或根证书 (名字必须为 root.crt 和 root.key),放在系统的某个目录,如 /data/ssl,并在启动时添加

  • 我已经看到了许多关于这个主题的帖子,但我无法解决这个问题,所以我发布了我的设置,以防有人知道需要更改什么? > 我有一个通过namecheap购买的域。我已经设置了自定义DNS,并添加了4个由AWS路由53中的托管区域生成的名称服务器。通过WHOIS.NET的DNS查找显示正确的值。 在路由53中,我在别名目标中添加了一条A记录,这样流量就会到达路由53并转到Cloudfront。 在CloudF

  • 问题内容: 服务器端给了我一个证书文件,我单击该证书并将其安装在计算机上,然后可以通过浏览器访问该站点。现在他们希望我使用给定的证书来爬网其网站。我卡在它的第一个阶段,试图让从。该站点没有登录。它仅检查您是否具有证书。 到目前为止,我所做的就是使用Firefox以文件格式导出证书。然后,我使用keytool命令将其(文件,而不是)导入Java密钥库。然后在代码中: 该会给我403次错误禁止访问。我

  • 我添加到我们的大型Java应用程序中的一个模块必须与另一家公司的SSL安全网站进行交互。问题是站点使用的是自签名证书。我有一个证书的副本来验证我没有遇到中间人攻击,我需要将这个证书合并到我们的代码中,这样才能成功连接到服务器。 下面是基本代码: 如果不对自签名证书进行任何额外的处理,这将在conn.getOutputStream()中终止,但以下情况除外: 我还看到我可以创建一个TrustMana

  • 在过去的几周里,我一直在努力掌握KeyClope,这样我就可以实现一种使用遗留提供商(基于Oracle,带有会话表和各种奇怪的东西)对用户进行身份验证的方法。我们计划在不久的将来解决这个问题,但目前我们必须解决这个问题,所以我们的想法是在前线使用KeyClope——利用它提供的主要好处,比如SSO——在需要身份验证的应用程序中省略传统的身份验证提供程序。 我读了一些关于构建自定义OIDC身份提供程

  • 问题内容: 我要添加到大型Java应用程序中的模块必须与另一家公司的SSL安全网站进行对话。问题是该站点使用自签名证书。我有证书的副本以验证我没有遇到中间人攻击,并且我需要将此证书合并到我们的代码中,以确保成功连接到服务器。 这是基本代码: 如果没有对自签名证书进行任何其他处理,它将死于conn.getOutputStream(),但以下情况除外: 理想情况下,我的代码需要教会Java在应用程序中