2016-01-19 12 views
7

Kendinden imzalı bir sertifika kullanan bir sunucuya HTTPS kullanarak bağlanmak için Restlet Kullanıcı ClientResource kullanmaya çalışıyorum. (Jetty'de çalışan bir Restlet uygulamasında özel bir SSLContextFactory'yi nasıl kullanırım?

https://github.com/pixelatedpete/selfsignedexample

aynı sınıfları kullanmak DynamicTrustManager ve SelfSignSslSocketFactory: burada görülebilir için bunun sadece ClientResource ve SSLContextFactory bir öznitelik ve kod olarak eklenen benim özel kullanan tek başına bir uygulamasını kullanarak çalışma var) Daha karmaşık bir Restlet uygulamasında (yukarıdakiyle aynı pompayla), Restric'i kullanarak Jetty aracılığıyla sunulan bir REST API'sini kullanıyorum. Özel SSLContextFactory artık kullanılmıyor.

Yukarıdaki gibi ClientResource içeriğine ekliyorum, ancak hiçbir zaman istemci kaynağı için sağlanan SSLContextFactory altta yatan httpclient için düşündüren herhangi bir günlük iletilerini göremiyorum. Ben ClientResource yerine doğrudan HttpClient kullanarak yeniden yazmak durumunda

:

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); 

şeyler tekrar çalışır.

Bu, başkalarının karşılaştığı bir şey mi? Eksik olduğum çok açık bir şeyden şüphelendiğime işaret edebilir mi?

Nb. Tomcat kullanarak tekrar denendi ve (biz burada Guice kullanıyoruz), ancak bu da yardım etmedi

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 

Ayrıca SslContextFactory enjekte çalıştı aynı sorunu olsun.

cevap

3

Tamam, sonunda anladım - Ben İstemci biraz eksikti:

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