سؤال

أنا أعمل على مكتبة من المفترض أن يتم دمجها في التطبيقات الأخرى. لا بد لي من التواصل مع خادم HTTPS ، وأنا أستخدم Apache Commons HTTPClient 3.1. لدي مفتاح خاص بي وأحتاج إلى تسجيل أ بروتوكول عبر: Protocol.registerProtocol. كنت أتساءل عما إذا كانت هناك طريقة لتسجيل هذا لمثيل العميل الخاص بي بدلاً من الثابت - بهذه الطريقة لا أفسد أي حالات أخرى ولا يفسد أحد.

لقد رأيت شيئًا حيث يمكنني الحصول على تكوين مضيف ومكالمة العملاء سيثوست, ، مع بروتوكول ، ولكن لا يبدو أنه يعمل بشكل صحيح. أنا أسجلها مثل:

HostConfiguration config = client.getHostConfiguration();
config.setHost(remoteUrl.getHost(), remoteUrl.getPort(), new Protocol("https", new MyProtocolSocketFactory(), 443));

ولكن عند محاولة إجراء اتصال ، تفشل مصافحة SSL ، بينما تعمل عند استخدام protocol.registerProtocol مع نفس المعلمات. الفشل هو المعيار:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

هل كانت مفيدة؟

المحلول

الترقية إلى httpcomponents 4 وترك العميل 3.x وحده.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top