GET请求拒绝连接



我有下面的CURL命令,使用-k选项可以很好地工作,这意味着:不安全,允许在没有证书的情况下连接到SSL站点。

我使用的是WSO2 API Manager工具版本1.9.1

curl -k -d "grant_type=password&username=test&password=test" -H 
     "Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,
      Content-Type: application/x-www-form-urlencoded" 
      https://XXX.XXX.XXX.XXX:8243/token

现在我想在Spring中使用RestTemplate实现同样的目的,所以到目前为止我开发了以下代码,它给了我一个连接被拒绝的错误:

我的代码

@Before
public void testBefore(){
    disableSslVerification();
}
private static void disableSslVerification() {
    try {
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                @Override
                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
                @Override
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
            }
        };
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }
}

@测试public void testGetTokenFromWSo2(){字符串url="https://XXXXXXXXXXX:8243/token";

    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
    map.add("grant_type", "password");
    map.add("username", "test");
    map.add("password", "test");
    HttpHeaders headers =new HttpHeaders();
    headers.add("Authorization", "Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
    headers.add("Content-Type", "application/x-www-form-urlencoded");
    RestTemplate restTemplate = new RestTemplate();
    HttpEntity<String> entity = new HttpEntity<String>(headers);
    HttpEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class, map);
    System.out.println("RESPONSE : "+response.getBody());
}

我看到的错误

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://XXXXXXXXXXXXXX:8243/token":Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:567)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:520)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:463)

我解决了这个错误。我们可以通过insecure的方式连接到SSL protected site,即连接到SSL sites without verifying cert。您可以在这里找到解决方案,它运行良好java.security.cert.CertificateException:不存在主题替代名称;。

最新更新