Apache HttpClient 4 programoje HTTPS paskirties vieta nereiškia, kad kiekvienas ryšys prasideda TLS. Paprastas HTTP tarpinis serveris pasiekiamas neužšifruotu ryšiu, prieš tai CONNECT atidaro tunelį ir TLS sluoksniuojamas link paskirties vietos.

Jei pasirinktinis ryšių tvarkytuvas registruoja tik https, pirmasis šuolis per tarpinį serverį gali nepavykti su UnsupportedSchemeException: http protocol is not supported.

4.5 API atveju, statydami tą tvarkytuvą, įtraukite abi gamyklas:

var registry = RegistryBuilder.<ConnectionSocketFactory>create()
    .register("http", PlainConnectionSocketFactory.getSocketFactory())
    .register("https", tlsFactory)
    .build();

var manager = new PoolingHttpClientConnectionManager(registry);
var client = HttpClients.custom()
    .setConnectionManager(manager)
    .setProxy(new HttpHost("proxy.example.net", 8080, "http"))
    .build();

tlsFactory yra esama programos SSLConnectionSocketFactory su numatytu patikimumo ir prieglobos vardo tikrinimu. Rodomi tipai priklauso Apache 4 org.apache.http paketams. Šis fragmentas daro prielaidą, kad Java gali numatyti vietinių kintamųjų tipus; senesnis Java kodas gali naudoti aiškius tipus.

Prijunkite pataisytą tvarkytuvą prie kliento, kuris iš tikrųjų naudojamas užklausai. Leidžiamai viešai HTTPS užklausai be tarpinio serverio autentifikavimo HTTP įrašas iš HTTP tarpinių serverių sąrašo gali užpildyti HttpHost tarpinio serverio adresą. Kito builder konfigūravimas neatnaujina jau sukurto kliento.

Taip pat patikrinkite builder nuosavybę: HttpClientBuilder dokumentuoja, kad aiškiai pateiktas ryšių tvarkytuvas gali panaikinti atskirus SSL konfigūracijos įvestis. Įdėkite reikiamas gamyklas į tvarkytuvo registrą, o ne manykite, kad vėlesnis setSSLContext iškvietimas pakeis jo vidų.

Ši diagnozė susijusi su vietine schemų registruota. Tarpinio serverio autentifikavimo iššūkis arba atmesta paskirties vieta yra vėlesnis, kitoks rezultatas. Išsaugokite abi gamyklų registracijas, kol tirsite tuos atsakymus.

Susiję straipsniai