gpt4 book ai didi

java - 使用外部 TSL 执行 RestTemplate

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:32 38 4
gpt4 key购买 nike

我正在尝试使用一个公共(public) REST 端点,它在 http 中作为 SSL https://jsonplaceholder.typicode.com/posts/1 可用,它返回一个非常简单的 json。

我已将我的 RestTemplate 配置为:

@Configuration
public class RestTemplateConfig {

@Value("${https.remote.proxy.host}")
private String PROXY_URI;

@Value("${https.remote.proxy.port}")
private int PROXY_PORT;

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {

SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress(PROXY_URI, PROXY_PORT));
requestFactory.setProxy(proxy);

return new RestTemplate(requestFactory);
}
}

我也什么时候 https://jsonplaceholder.typicode.com/posts/1 在 chrome 中单击挂锁符号 ⟼ 有效 ⟼ 详细信息 ⟼ 复制到文件作为 jsonplaceholder.cer 并使用 KeyStore explorer 我复制了 cacerts (JAVA_HOME/jre/lib/security)。

当我做下一步时:

@Autowired
RestTemplate restTemplate;

@RequestMapping(value="test", method = RequestMethod.GET)
public Post getPost() {
Post post = restTemplate.getForObject("http://jsonplaceholder.typicode.com/posts/1", Post.class);
return post;
}

我得到了一个成功的回应:

{
"userId": "1",
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

但是当我对 https url 做同样的事情时,我得到了下一个错误:

{
"timestamp": 1520596009201,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.web.client.ResourceAccessException",
"message": "I/O error on GET request for \"https://jsonplaceholder.typicode.com/posts/1\": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is 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",
"path": "/api/v1/sepa/test/"
}

这也来自 Java:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) ~[na:1.8.0_161]
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) ~[na:1.8.0_161]
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) ~[na:1.8.0_161]
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392) ~[na:1.8.0_161]

我错过了什么?执行此测试是因为我必须连接到供应商 API。提前致谢。

最佳答案

似乎是你的 RestTemplate 有问题。 Vanilla RestTemplate 对我来说很好用。基本调试程序 - 在它开始工作之前退出。缩小问题范围。

        RestTemplate restTemplate = new RestTemplate();
restTemplate.getRequestFactory().createRequest(new URI("https://jsonplaceholder.typicode.com/posts/1"), HttpMethod.GET).execute();
System.out.println("Got it");

关于java - 使用外部 TSL 执行 RestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49193386/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com