V aplikaciji Apache HttpClient 4 cilj HTTPS ne pomeni, da se vsaka povezava začne s TLS. Do običajnega proxyja HTTP pridemo po nešifrirani povezavi, preden CONNECT odpre tunel in se TLS plasti proti cilju.

Če upravitelj povezav po meri registrira samo https, lahko prvi skok skozi proxy spodleti z UnsupportedSchemeException: http protocol is not supported.

Za API 4.5 pri gradnji tega upravitelja vključite obe tovarni:

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 je obstoječi SSLConnectionSocketFactory aplikacije s predvidenim preverjanjem zaupanja in imena gostitelja. Prikazani tipi pripadajo paketom org.apache.http v Apache 4. Odlomek predvideva sklepanje tipov lokalnih spremenljivk v Javi; starejša koda Java lahko uporabi izrecne tipe.

Popravljeni upravitelj pritrdite na odjemalca, ki se dejansko uporablja za zahtevo. Za dovoljeno javno zahtevo HTTPS brez preverjanja pristnosti proxyja lahko vnos HTTP s seznama proxyjev HTTP zapolni naslov proxyja v HttpHost. Nastavitev drugega builderja ne posodobi že zgrajenega odjemalca.

Preverite tudi lastništvo builderja: HttpClientBuilder dokumentira, da lahko izrecno zagotovljen upravitelj povezav preglasi njegove ločene vhode konfiguracije SSL. Zahtevane tovarne vstavite v register upravitelja, namesto da bi domnevali, da bo poznejši klic setSSLContext zamenjal njegovo notranjost.

Ta diagnoza zadeva lokalni register shem. Izziv preverjanja pristnosti proxyja ali zavrnjen cilj je poznejši, drugačen rezultat. Ohranite obe registraciji tovarn, medtem ko raziskujete te odgovore.

Sorodni članki