Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 如何禁用特定http请求的证书验证?_Java_Spring_Amazon Web Services_Ssl_Ssl Certificate - Fatal编程技术网

Java 如何禁用特定http请求的证书验证?

Java 如何禁用特定http请求的证书验证?,java,spring,amazon-web-services,ssl,ssl-certificate,Java,Spring,Amazon Web Services,Ssl,Ssl Certificate,我是JavaSpring世界的初学者,不知道如何处理我的情况。我必须使用HTTPS上的一些API,这些API具有非可信CA颁发的证书。我有一个代码: RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json;charset=UTF-8"); hea

我是JavaSpring世界的初学者,不知道如何处理我的情况。我必须使用HTTPS上的一些API,这些API具有非可信CA颁发的证书。我有一个代码:

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json;charset=UTF-8");
headers.add("Accept", "*/*");
ResponseEntity<byte[]> responseEntity = restTemplate.getForEntity(url, byte[].class, headers);
因此,我使用以下代码禁用了证书验证:

public class SSLCertificateValidation {
public static void disable() {
        try {
            SSLContext sslc = SSLContext.getInstance("TLS");
            TrustManager[] trustManagerArray = { new NullX509TrustManager() };
            sslc.init(null, trustManagerArray, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslc.getSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier(new NullHostnameVerifier());
        }    
        catch(Exception e) {
            e.printStackTrace();
        }
    }

    private static class NullX509TrustManager implements X509TrustManager {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            System.out.println();
        }
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            System.out.println();
        }
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }

    private static class NullHostnameVerifier implements HostnameVerifier {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
}
现在我的应用程序可以使用这个API,但另一方面,我正在使用这个应用程序中的一些AWS服务。现在我得到了一个错误:

c.a.h.AmazonHttpClient - Unable to execute HTTP request: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
是否有任何方法仅对特定URL禁用证书验证?我不知道我现在该怎么办


PS我知道如何将证书安装到Java cacerts。但不幸的是,它不适合我的情况。

与其禁用SSL检查,不如尝试将证书安装到java cacerts,这样(我假设自签名证书)就会被视为受信任的证书

获取证书的最佳方法是由服务的所有者为您提供证书,否则您应该能够非常轻松地从浏览器导出证书文件


我不会详细介绍如何安装证书,因为在这个问题上有一些非常好的答案

我知道如何将证书安装到java cacerts上。但不幸的是,这对我的处境不利。我正在寻找我所问问题的答案。
c.a.h.AmazonHttpClient - Unable to execute HTTP request: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty