V aplikácii s Apache HttpClient 4 cieľové HTTPS neznamená, že každé pripojenie začína TLS. K bežnej HTTP proxy sa prichádza cez nešifrované pripojenie, kým CONNECT otvorí tunel a TLS sa vrství smerom k cieľu.

Ak vlastný správca spojení registruje len https, prvý krok cez proxy môže zlyhať s UnsupportedSchemeException: http protocol is not supported.

Pre rozhranie 4.5 zahrňte pri zostavovaní tohto správcu obe továrne:

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 existujúci SSLConnectionSocketFactory aplikácie so zamýšľaným overením dôvery a názvu hostiteľa. Uvedené typy patria do balíkov org.apache.http Apache 4. Úryvok predpokladá odvodzovanie typov lokálnych premenných v Jave; starší kód Java môže použiť explicitné typy.

Pripojte opraveného správcu ku klientovi, ktorý sa pre požiadavku skutočne používa. Pre povolenú verejnú HTTPS požiadavku bez overenia proxy môže HTTP záznam zo zoznamu HTTP proxy vyplniť adresu proxy v HttpHost. Konfigurácia iného buildera už vytvoreného klienta neaktualizuje.

Preverte aj vlastníctvo buildera: HttpClientBuilder dokumentuje, že výslovne dodaný správca spojení môže prepísať jeho samostatné vstupy konfigurácie SSL. Vložte potrebné továrne do registra správcu, namiesto predpokladu, že neskoršie volanie setSSLContext nahradí jeho vnútro.

Táto diagnóza sa týka miestneho registra schém. Výzva na overenie proxy alebo odmietnutý cieľ je neskorší, iný výsledok. Zachovajte obe registrácie tovární, kým tieto odpovede skúmate.

Súvisiace články