使用HTTPs(和证书)使用Java/Spring rest服务

使用HTTPs(和证书)使用Java/Spring rest服务,java,rest,apache-httpclient-4.x,spring-rest,Java,Rest,Apache Httpclient 4.x,Spring Rest,我必须使用在HTTPs上运行的rest服务。生产者给了我证书和方法参数。请告诉我如何使用该服务以及如何使用代码中的证书。我正在使用Spring4和Java8。请共享代码片段。您可以参考下面的链接,使用RestTemplate通过HTTPs访问RESTful服务 如果它只是一个单向SSL,使用者在其中验证服务的身份,则只需将服务提供的证书(生产者证书)导入到您的信任存储(CACerts文件)或编写您自己的信任管理器即可 对于双向SSL,其中服务还验证客户端的身份,您不仅需要验证服务的身份,还需要

我必须使用在HTTPs上运行的rest服务。生产者给了我证书和方法参数。请告诉我如何使用该服务以及如何使用代码中的证书。我正在使用Spring4和Java8。请共享代码片段。

您可以参考下面的链接,使用RestTemplate通过HTTPs访问RESTful服务


如果它只是一个单向SSL,使用者在其中验证服务的身份,则只需将服务提供的证书(生产者证书)导入到您的信任存储(CACerts文件)或编写您自己的信任管理器即可

对于双向SSL,其中服务还验证客户端的身份,您不仅需要验证服务的身份,还需要向服务发送证书,以便服务可以对其作出决定

下面的代码片段是针对双向SSL的,但您可以通过注释将客户端证书发送到服务器的部分,轻松地将其应用于单向SSL

    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
        public X509Certificate[] getAcceptedIssuers(){return null;}
        public void checkClientTrusted(X509Certificate[] certs, String authType){}
        public void checkServerTrusted(X509Certificate[] certs, String authType){}
    }};

    // Install the all-trusting trust manager
    RestTemplate restTemplate = new RestTemplate();

    try {

        String keyPassphrase = "changeit";

        KeyStore keyStore = KeyStore.getInstance("jks");
        keyStore.load(new FileInputStream("c:\\jks\\client.jks"), keyPassphrase.toCharArray());

        KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());           
        kmfactory.init(keyStore, keyPassphrase.toCharArray());

        KeyManager[] keyManager = kmfactory.getKeyManagers();

        SSLContext sc = SSLContext.getInstance("TLS");

        sc.init(keyManager, trustAllCerts, new SecureRandom());

        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier(){

            public boolean verify(String hostname,
                    javax.net.ssl.SSLSession sslSession) {
                if (hostname.equals("localhost")) {
                    return true;
                }
                return false;
            }
        });

    } catch (Exception e) {
        ;
    }       




    System.out.println("Testing listAllUsers API-----------");


    restTemplate.setErrorHandler(new ResponseErrorHandler(){

        @Override
        public void handleError(ClientHttpResponse rs) throws IOException {
            InputStream in = rs.getBody();
            String str = new String("");
            int len =0;
            while((len = in.available()) > 0){
                byte[] bytes = new byte[len];
                in.read(bytes);
               str = str + new String (bytes, "UTF-8");

            }

            System.out.println(str);

        }

        @Override
        public boolean hasError(ClientHttpResponse rs) throws IOException {

            return false;
        }

    });
    try{

    String usersMap = restTemplate.getForObject(REST_SERVICE_URI+"/user/shailendra/", String.class);`

可以使用弹簧座模板。看看那边的一些代码片段,看看你是否得到了你所需要的。