java - 如何在 Jetty 上运行的 ReSTLet 应用程序中使用自定义 SSLContextFactory?

标签 java ssl restlet

我正在尝试使用 ReSTLet 的 ClientResource 通过 HTTPS 连接到使用自签名证书的服务器。我使用仅使用 ClientResource 的独立应用程序进行此工作,并将我的自定义 SSLContextFactory 添加为属性和代码,可在此处查看:

https://github.com/pixelatedpete/selfsignedexample

当我在更复杂的 ReSTLet 应用程序(具有与上述相同的 pom)中使用相同的类(DynamicTrustManager 和 SelfSignSslSocketFactory)时,该应用程序使用 ReSTLet 提供通过 Jetty 提供的 REST API,我的自定义 SSLContextFactory 不再被使用。

我如上所述将它添加到 ClientResource 上下文中,但我从未看到任何日志消息表明提供给 ClientResource 的 SSLContextFactory 被传递到底层的 httpclient。

如果我直接使用 HttpClient 而不是 ClientResource 重写:

HttpPost post = new HttpPost(cr.getReference().toString());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(...);
DynamicTrustManager tm = new DynamicTrustManager(..., cert);
SelfSignTrustSslContextFactory scf = (SelfSignTrustSslContextFactory) 
CloseableHttpClient httpclient = HttpClients.custom().setSslcontext(scf.createSslContext()).build();
CloseableHttpResponse response = httpclient.execute(post);

事情又好了。

这是其他人遇到过的并且可以指出我怀疑是我遗漏的非常明显的事情吗?

铌。再次尝试使用 Tomcat 并得到同样的问题

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

还尝试注入(inject) SslContextFactory(我们在这里使用 Guice),但这也无济于事。

最佳答案

好的,所以终于弄明白了——我错过了客户端位:

Client client = new Client(crCtx, Protocol.HTTPS);
ClientResource clientResource = new ClientResource("https://example.com");
clientResource.setNext(client);

关于java - 如何在 Jetty 上运行的 ReSTLet 应用程序中使用自定义 SSLContextFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880657/

相关文章:

java - Runtime.getRuntime().exec() 执行两行?

java - IntelliJ 理念 : JUnit Test Class template depending on condition

php - cURL SSL 请求失败

oracle - ORA-28860 : Fatal SSL error when using UTL_HTTP?

java - org.reSTLet.routing.Router 似乎不接受编码的斜杠

reSTLet - reSTLet 默认添加用户代理 header 吗?

java - 迭代 JSON 并将列表数组添加到对象/数组中

java - Java 类型的非法开始

java - 如何从 http :conduit java 外部化属性

http - OSGi 中的 ReSTLet HTTP 问题