Apache HttpClient 4 lietojumprogrammā HTTPS galamērķis nenozīmē, ka katrs savienojums sākas ar TLS. Vienkāršs HTTP starpniekserveris tiek sasniegts pa nešifrētu savienojumu, pirms CONNECT atver tuneli un TLS tiek slāņots pret galamērķi.

Ja pielāgots savienojumu pārvaldnieks reģistrē tikai https, pirmais starpniekservera lēciens var neizdoties ar UnsupportedSchemeException: http protocol is not supported.

4.5 API gadījumā, veidojot šo pārvaldnieku, iekļaujiet abas rūpnīcas:

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 ir lietojumprogrammas esošā SSLConnectionSocketFactory ar paredzēto uzticības un resursdatora nosaukuma pārbaudi. Parādītie tipi pieder Apache 4 org.apache.http pakotnēm. Šis fragments pieņem, ka Java spēj secināt lokālo mainīgo tipus; vecāks Java kods var izmantot skaidrus tipus.

Pievienojiet laboto pārvaldnieku klientam, kas faktiski tiek izmantots pieprasījumam. Atļautam publiskam HTTPS pieprasījumam bez starpniekservera autentifikācijas HTTP ieraksts no HTTP starpniekserveru saraksta var aizpildīt HttpHost starpniekservera adresi. Cita builder konfigurēšana neatjaunina jau izveidotu klientu.

Pārbaudiet arī builder īpašumtiesības: HttpClientBuilder dokumentē, ka skaidri nodrošināts savienojumu pārvaldnieks var ignorēt tā atsevišķās SSL konfigurācijas ievades. Ievietojiet nepieciešamās rūpnīcas pārvaldnieka reģistrā, nevis pieņemiet, ka vēlāks setSSLContext izsaukums aizstās tā iekšieni.

Šī diagnostika attiecas uz lokālo shēmu reģistru. Starpniekservera autentifikācijas izaicinājums vai noraidīts galamērķis ir vēlāks, citāds rezultāts. Saglabājiet abus rūpnīcu reģistrācijas ierakstus, kamēr pētāt šīs atbildes.

Saistītie raksti