Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以禁用https的ssl?_Java_Ssl_Https_Okhttp - Fatal编程技术网

Java 是否可以禁用https的ssl?

Java 是否可以禁用https的ssl?,java,ssl,https,okhttp,Java,Ssl,Https,Okhttp,java上的应用程序。使用OkHttp版本2.7.5。向另一个服务发出请求并发生错误 SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requeste

java上的应用程序。使用OkHttp版本2.7.5。向另一个服务发出请求并发生错误

SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target
我没有证书。okHttp3版本似乎有解决方案。但版本无法更改。如何解决问题

是否可以禁用https的ssl

实际上,没有

SSL的使用是HTTPS协议的基础。如果您根本不想使用SSL,请使用HTTP端点配置服务器,并使用该端点而不是HTTPS

此外,使用SSL需要(至少)语法格式良好的证书。这也是HTTPS协议的基础

现在,如果问题是您的服务器证书已过期,则可能的解决方案是使用中描述的方法:

如果问题是您无法为服务器获得适当的证书(例如,您负担不起),则另一种解决方案是:

  • 生成一个;看,
  • 将其安装在服务器端
  • 如上所述配置客户端以忽略证书有效性
  • 但请注意,执行这两种操作都有安全问题

    还有第三种解决方案更安全

  • 生成自签名证书(如上所述)
  • 将其安装在服务器端
  • 使用Keytool将证书作为可信证书添加到客户端应用程序的密钥库中
  • 是否可以禁用https的ssl

    实际上,没有

    SSL的使用是HTTPS协议的基础。如果您根本不想使用SSL,请使用HTTP端点配置服务器,并使用该端点而不是HTTPS

    此外,使用SSL需要(至少)语法格式良好的证书。这也是HTTPS协议的基础

    现在,如果问题是您的服务器证书已过期,则可能的解决方案是使用中描述的方法:

    如果问题是您无法为服务器获得适当的证书(例如,您负担不起),则另一种解决方案是:

  • 生成一个;看,
  • 将其安装在服务器端
  • 如上所述配置客户端以忽略证书有效性
  • 但请注意,执行这两种操作都有安全问题

    还有第三种解决方案更安全

  • 生成自签名证书(如上所述)
  • 将其安装在服务器端
  • 使用Keytool将证书作为可信证书添加到客户端应用程序的密钥库中

  • 为什么您想使用HTTPS但没有证书,您应该按照上面提到的步骤进行操作。但是,如果你想真正忘记HTTPS是什么意思,你可以考虑重写行为

     private static OkHttpClient getUnprotectedClient() {
        try {
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(java.security.cert.X509Certificate[] chain,
                                                   String authType) throws CertificateException {
                    }
    
                    @Override
                    public void checkServerTrusted(java.security.cert.X509Certificate[] chain,
                                                   String authType) throws CertificateException {
                    }
    
                    @Override
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                }
            };
    
            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    
    
            return new okhttp3.OkHttpClient.Builder()
                    .sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
                    .hostnameVerifier(new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    }).build();
    
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    

    为什么您想使用HTTPS但没有证书,您应该按照上面提到的步骤进行操作。但是,如果你想真正忘记HTTPS是什么意思,你可以考虑重写行为

     private static OkHttpClient getUnprotectedClient() {
        try {
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(java.security.cert.X509Certificate[] chain,
                                                   String authType) throws CertificateException {
                    }
    
                    @Override
                    public void checkServerTrusted(java.security.cert.X509Certificate[] chain,
                                                   String authType) throws CertificateException {
                    }
    
                    @Override
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                }
            };
    
            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    
    
            return new okhttp3.OkHttpClient.Builder()
                    .sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
                    .hostnameVerifier(new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    }).build();
    
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    

    . 除非OKHttp有一些特性,避开了Java中通常的hanlde证书方式,否则它应该可以工作。Pablo,非常感谢!你的回答有帮助!可能的副本。除非OKHttp有一些特性,避开了Java中通常的hanlde证书方式,否则它应该可以工作。Pablo,非常感谢!你的回答有帮助!也有免费获取证书的方法,例如letsencrypt。但这似乎完全是关于建立客户机连接,而不是管理服务器证书。需要连接到外部服务,连接尝试表示boo。也有免费获取证书的方法,如letsencrypt。但这似乎完全是关于建立客户机连接,而不是管理服务器证书。需要连接到外部服务,连接尝试显示boo。