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

在使用带有header的REST客户端时获取SSL.SSLHandShakeException,但与PostMan配合良好

田博远
2023-03-14

我有一个外部REST资源,详细信息如下:

  1. URL:abc.com/orders(域为https)
  2. 我需要将UserID作为一个HTTP标头传递,该标头的键“user”值为“abcd”
  3. 这将返回一个JSON响应
try {

            Client client = Client.create();

            WebResource webResource = client.resource("abc.com/orders");

            ClientResponse response = webResource.header("user", "abcd").accept("application/json")
                    .get(ClientResponse.class);

            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
            }

            String output = response.getEntity(String.class);

            System.out.println("Output from Server .... \n");
            System.out.println(output);

        } catch (Exception e) {

            e.printStackTrace();

        }
com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155)
    at com.sun.jersey.api.client.Client.handle(Client.java:652)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509)
user>openssl s_client -connect  abc.com:443

CONNECTED(00000214)
7832:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:s23_clnt.c:802:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 308 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1531657560
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

共有1个答案

许嘉珍
2023-03-14

这些是使你的程序工作的说明。顺便说一句,我在windows上,用的是谷歌Chrome。

你确实需要证书。

1)首先,进入url(不管是网站还是restful服务),让我们选择Google.com。右键点击页面,然后点击“Inspect”。

5)转到“详细信息”选项卡,选择证书名称:

6)点击“复制到文件”,然后选择它的名字和你想保存它的地方。我在桌面上保存了我的,命名为“test.cer”。

现在您已经完成了证书的导出。接下来,您希望将它添加到JVM的信任存储中。

keytool-import-storepass changeit-noprompt-alias*alias*-keystore cacerts-trustcacerts-file*path_to_certificate*

请注意,别名可以是任何东西,不管您调用的文件是什么,只要它不与TrustStore中已经存在的其他证书的别名发生冲突。

在我的情况下,我发出以下命令:

5)现在你可以重新启动你的应用程序,它应该可以工作了。有些人建议重新启动你的电脑,但我不知道这是否有必要。

 类似资料:
  • 我正在url上与邮递员进行api调用: 无标题无参数无任何内容。但java也是如此: 给我403。问题出在哪里?

  • 我试图通过postman rest客户端,使用json数据和POST方法测试后端服务。 前2个参数是数组列表,其余都是字符串或整数我传递的数据如下: 我的控制器接受以下内容: 提交后,我得到以下错误:组织。springframework。http。转换器。HttpMessageNoteableException:无法读取JSON:无法反序列化java实例。util。ArrayList out of

  • 我注意到Rest客户端上有两个指南:MicroProfile和Vertx。既然微文件支持异步,那么使用基于Vertx的Rest客户端有什么好处?

  • 问题内容: 我需要连接到通过REST接口提供JSON的端点。我真的找不到以一致的方式将这两种技术结合在一起的东西。 我正在寻找一个可以让我快速入门的图书馆。 问题答案: 您可以使用Json.Net库,这个扩展类是利用了 一些用法示例: 编辑: 这是另一个没有

  • 我已经使用Django和Django rest框架设置了一个APIendpoint,以使用POST请求提交表单。当使用PostMan发送请求时,后端工作正常,并将数据添加到数据库中。但是,当我使用fetch时,后端返回。前端是一个react网页包设置。 这是我用来发出请求的代码: 下面是的打印: 我还使用wireshark捕获PostMan和获取请求。这是邮递员的请求,成功的响应: 然而,这是带有

  • 我有一个从服务器端抛出的异常,我希望在客户端捕捉到这个异常。异常应该使用Jersey通过REST发送。这是我目前所掌握的: 定义我的异常: