2016-01-19 8 views
7

मैं एक सर्वर पर HTTPS का उपयोग कर कनेक्ट करने के लिए Restlet's ClientResource का उपयोग करने का प्रयास कर रहा हूं जो एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करता है। मैं इस एक स्टैंड-अलोन आवेदन है कि बस ClientResource और अपने कस्टम SSLContextFactory एक विशेषता और कोड के रूप में जोड़ा का उपयोग करता है का उपयोग कर काम कर रहा है इसे यहाँ देखा जा सकता है:जेटी पर चल रहे एक रेस्टलेट एप्लिकेशन में मैं एक कस्टम SSLContextFactory का उपयोग कैसे करूं?

https://github.com/pixelatedpete/selfsignedexample

जब मैं एक ही वर्गों का उपयोग करें (DynamicTrustManager और SelfSignSslSocketFactory) एक अधिक जटिल रेस्टलेट एप्लिकेशन (उपरोक्त के समान पोम के साथ) में जेटी के माध्यम से एक आरईएसटी एपीआई प्रदान करने के लिए रीस्टलेट का उपयोग करता है, मेरे कस्टम एसएसएलकॉन्टेक्स्ट फैक्ट्री का अब उपयोग नहीं किया जा रहा है।

मैं इसे क्लाइंट रिसोर्स संदर्भ में ऊपर के रूप में जोड़ता हूं लेकिन मुझे कभी भी लॉग संदेश नहीं दिखते हैं कि क्लाइंट रिसोर्स को प्रदान किया गया 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); 

बातें फिर से काम करते हैं।

क्या यह किसी और के पास आ गया है और यह बता सकता है कि मुझे क्या संदेह है कि एक बहुत ही स्पष्ट चीज है जो मुझे याद आ रही है?

एनबी। फिर से कोशिश की बिलाव का उपयोग कर और एक ही मुद्दा

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 

इसके अलावा SslContextFactory इंजेक्शन लगाने की कोशिश की (हम यहाँ Guice का उपयोग कर रहे है), लेकिन है कि या तो मदद नहीं की हो।

उत्तर

3

ठीक है, तो अंत में यह समझ से बाहर है - मैं ग्राहक सा याद आ रही थी:

Client client = new Client(crCtx, Protocol.HTTPS); 
ClientResource clientResource = new ClientResource("https://example.com"); 
clientResource.setNext(client); 
संबंधित मुद्दे