当前位置: 首页 > 知识库问答 >
问题:

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

秦宏盛
2023-03-14

我必须使用在HTTPs上运行的rest服务。制作人给了我证书和方法参数。您能告诉我如何使用该服务以及如何使用代码中的证书吗。我使用的是Spring4和Java8。请分享代码片段。

共有2个答案

慕容安易
2023-03-14

如果它只是消费者验证服务身份的单向SSL,您只需将服务提供的证书(生产者证书)导入您的信任存储(CACerts文件)或编写您自己的信任管理器。

对于服务还验证客户端身份的2 Way 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);`
穆商震
2023-03-14

您可以参考下面的链接,了解使用RestTemboard使用HTTP访问RESTful服务

http://www.radcortez.com/ssl-tls-rest-server-client-with-spring-and-tomee/

使用Spring RestTemboard访问Https Rest服务

 类似资料:
  • 问题内容: 我有一个扩展名为’.pfx’的文件以及此证书的密码。 我需要做的是将简单的GET请求发送到Web服务并读取响应正文。 我需要实现类似于以下方法: 我还尝试使用openssl将证书转换为“无密码”格式: 因此,my方法的替代实现可能是: 非常感谢您的帮助,我花了半天的时间进行了搜索,但是我还没有找到可以帮助我的示例,似乎我在理解一些关于SSL和其他内容的基本假设时遇到了问题。 问题答案:

  • 问题内容: 我在带ssl的Apache下有肥皂服务,而没有ssl的suds效果很好。 我有客户端证书(my.crt和user.p12文件)。 我如何配置suds客户端,使其与通过https的服务一起使用? 我没有证书 问题答案: 听起来您想使用 客户端 证书而不是某些注释中所述的 服务器 证书进行身份验证。我遇到了同样的问题,并且能够为SUDS编写自定义传输。这是对我有用的代码。 您需要PEM格式

  • 也许我会在这里找到帮助。我想在spring boot应用程序上启用SSL。我的配置如下: 服务器:端口:8999 SSL:enabled:true key-store:classpath:keystore.jks key-store-password:mypass key-password:mypass 问题是我的密钥库。我已将*crt文件导入别名为“tomcat”的密钥存储库: 但是,我仍然无法

  • 问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我

  • 使用用户证书验证 SSH (服务端) 在以安全为前提下要保障可靠性、可控性和一致性是非常复杂的。我们可以利用 SSH 又或者说 OpenSSH 来替代所依赖的中央身份验证(比如 LDAP 或者 Kerberos) 除了 通过 PIV 和 PKCS#11 验证 SSH 之外,还可以增加远程 SSH 验证的安全性。Facebook 和 Yahoo 已经更换使用 SSH 用户证书来避免中心认证系统宕机。