轻松解决找不到SSL证书

在请求网络的时候如果使用https的话会出现下面的错误,找不到证书的路径信任锚点

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

这个错误也很好解决,最好的解决办法就是获取正规合法的https证书,让后台上传或者存在assets中,进行应用验证,这是最根本的解决办法!如果没有证书那只能忽略证书的校验了,下面是代码实现

                    SSLContext sc = SSLContext.getInstance("SSL");
                    sc.init(null, new TrustManager[]{new X509TrustManager() {


                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {

                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {

                        }

                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }

                    }}, new SecureRandom());

然后引用到OkHttpClient上面去

                    client.setSslSocketFactory(sc.getSocketFactory());
                    client.setHostnameVerifier(new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    });

这样就忽略掉了正式的校验,看下整体请求的代码吧,这个是我写好的工具类,我只展示其中一段(get请求)大概明白咋添加就行了

    public static void requestData(final String url, final HashMap<String, String> params, final RequestCallBack callBack) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    SSLContext sc = SSLContext.getInstance("SSL");
                    sc.init(null, new TrustManager[]{new X509TrustManager() {


                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {

                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {

                        }

                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }

                    }}, new SecureRandom());
                    final String allUrl =  url + builderParams(params);
                    Log.e("---------------------", allUrl);
                    Request request = new Request.Builder()
                            .url(allUrl)
                            .addHeader("Accept-Encoding", "musixmatch")
                            .build();
                    final OkHttpClient client = new OkHttpClient();
                    client.setSslSocketFactory(sc.getSocketFactory());
                    client.setHostnameVerifier(new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    });
                    client.setConnectTimeout(30, TimeUnit.SECONDS);
                    client.setWriteTimeout(30, TimeUnit.SECONDS);
                    client.setReadTimeout(30, TimeUnit.SECONDS);
                    client.setRetryOnConnectionFailure(false);
                    client.setConnectionPool(new ConnectionPool(MAX_IDLE_CONNECTIONS, KEEP_ALIVE_DURATION_MS));
                    client.newCall(request).enqueue(new Callback() {
                        @Override
                        public void onFailure(Request request, IOException e) {
                            if (callBack != null)
                                callBack.onFailure(e);
                        }

                        @Override
                        public void onResponse(Response response) throws IOException {

                            if (callBack == null) return;
                            if (!response.isSuccessful()) {

                                callBack.onFailure(null);
                            } else {

                                callBack.onSuccess(response.body().string());
                            }
                        }

                    });
                } catch (Exception e) {
                    if (callBack != null) callBack.onFailure(null);
                }
            }
        }).start();
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spack 不会检查 SSL 证书。如果需要更新 Python 以启用此功能。 Spack 是一个用于构建和安装科学软件包的包管理器。它可以帮助用户在不同的计算环境中管理软件依赖关系和版本。然而,Spack 不会验证 SSL 证书SSL 证书是用于确保网络通信安全的一种数字证书。当使用 SSL(Secure Socket Layer)或 TLS(Transport Layer Security)加密协议进行网络通信时,验证 SSL 证书可确保通信的机密性和完整性。然而,Spack 并不会检查或验证 SSL 证书。 要启用 SSL 证书验证功能,您需要更新您的 Python 版本。Python 是一种流行的编程语言,也是许多科学软件包的基础。Python 提供了许多库和模块来进行网络通信,包括使用 SSL 进行安全通信的功能。 更新 Python 可以通过多种方式实现,具体取决于您使用的操作系统和安装环境。您可以通过升级到最新版本的 Python 来获得最新的功能和安全修复,从而启用 SSL 证书验证功能。您可以检查 Python 官方网站或相关社区网站以获取有关如何更新 Python 的详细指南。 请注意,启用 SSL 证书验证对于确保网络通信的安全性至关重要。特别是在处理敏感数据或进行重要操作时,使用 SSL 证书验证可提供额外的保障。因此,建议及时更新 Python 并启用 SSL 证书验证功能。 ### 回答2: Spack不会检查SSL证书。因此,如果你需要更新Python,你需要启用SSL证书验证功能。 SSL证书是用于验证与服务器之间的安全连接的数字证书。它确保了数据在传输过程中的加密和安全性。 当Spack在尝试与服务器建立SSL连接时,它不会验证服务器的SSL证书的有效性。这意味着,如果服务器的SSL证书过期、无效或来自不可信任的证书颁发机构,Spack无法识别这些问题。因此,这可能导致潜在的安全风险。 为了解决这个问题,你需要更新Python的配置,以启用SSL证书验证功能。在Python中,可以通过更新相关的库和配置文件,来启用SSL证书验证。 具体的步骤可能因你的操作系统和Python版本而异。一般来说,你可以执行以下步骤来更新Python的配置: 1. 确保你使用的是最新版本的Python。你可以访问官方Python网站,下载并安装最新的Python版本。 2. 更新pip(Python的软件包管理工具)到最新版本。你可以使用命令行运行"pip install --upgrade pip"来更新pip。 3. 安装所需的SSL证书库。对于大多数Linux发行版,你可以使用系统的软件包管理器(如apt、yum等)安装所需的库。对于Windows,你可以从官方网站下载OpenSSL库进行安装。 4. 更新Python的配置文件以启用SSL证书验证。在Python安装目录中,你可以到名为"python.ini"或"openssl.cnf"的文件。打开该文件,并确保SSL验证功能已启用。 完成以上步骤后,你的Python应该已经更新并启用了SSL证书验证功能。这样,当Spack尝试与服务器建立SSL连接时,将能够正确验证服务器的SSL证书的有效性。 ### 回答3: Spack不会检查SSL证书。你需要更新你的Python环境以启用此功能。 SSL证书用于确认网络通信中的安全性,以确保数据在传输过程中不被窃取或篡改。Spack是一个包管理工具,它允许用户轻松安装和管理软件包,但它本身并不具备对SSL证书的检查功能。 要解决这个问题,你需要更新你的Python环境。Python是一种通用的编程语言,可以用于开发各种应用程序。更新Python可能涉及到升级Python解释器或安装新的Python版本。更新Python可以获得最新的功能和修复,其中也包括对SSL证书的检查和验证。 更新Python的方法取决于你所使用的操作系统和Python版本。一般来说,你可以通过访问Python的官方网站,下载最新的Python发行版。在安装过程中,你可以选择更新已有的Python安装,或者将新的Python版本安装到一个独立的目录中,以便与旧的Python版本并存。 一旦你更新了Python,Spack将能够检查和验证SSL证书,以确保在软件包安装过程中的安全通信。请注意,根据你的具体使用情况,可能还需要进行其他配置或安装相关的依赖库,以确保整个环境能够正常工作。 总之,要解决Spack不检查SSL证书的问题,你需要更新Python环境,并确保相应的功能和依赖库已经正确安装和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值