Σε μια εφαρμογή Apache HttpClient 4, ένας προορισμός HTTPS δεν σημαίνει ότι κάθε σύνδεση ξεκινά με TLS. Σε έναν συνηθισμένο διαμεσολαβητή HTTP φτάνουμε μέσω απλής σύνδεσης πριν το CONNECT ανοίξει τη σήραγγα και το TLS στρωθεί προς τον προορισμό.

Αν ένας προσαρμοσμένος διαχειριστής συνδέσεων καταχωρεί μόνο https, το πρώτο άλμα μέσω του διαμεσολαβητή μπορεί να αποτύχει με UnsupportedSchemeException: http protocol is not supported.

Για το API 4.5, συμπεριλάβετε και τα δύο εργοστάσια κατά την κατασκευή αυτού του διαχειριστή:

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 είναι το υπάρχον SSLConnectionSocketFactory της εφαρμογής, με τον προβλεπόμενο έλεγχο εμπιστοσύνης και ονόματος κεντρικού υπολογιστή. Οι τύποι που εμφανίζονται ανήκουν στα πακέτα org.apache.http του Apache 4. Το απόσπασμα προϋποθέτει συμπερασμό τύπων τοπικών μεταβλητών της Java· παλαιότερος κώδικας Java μπορεί να χρησιμοποιεί ρητούς τύπους.

Συνδέστε τον διορθωμένο διαχειριστή με τον πελάτη που χρησιμοποιείται πραγματικά για το αίτημα. Για ένα επιτρεπόμενο δημόσιο αίτημα HTTPS χωρίς έλεγχο ταυτότητας διαμεσολαβητή, μια καταχώριση HTTP από τη λίστα διαμεσολαβητών HTTP μπορεί να συμπληρώσει τη διεύθυνση διαμεσολαβητή του HttpHost. Η ρύθμιση άλλου builder δεν ενημερώνει έναν ήδη κατασκευασμένο πελάτη.

Ελέγξτε επίσης την ιδιοκτησία του builder: το HttpClientBuilder τεκμηριώνει ότι ένας ρητά παρεχόμενος διαχειριστής συνδέσεων μπορεί να υπερισχύσει των ξεχωριστών εισόδων ρύθμισης SSL. Βάλτε τα απαιτούμενα εργοστάσια στο μητρώο του διαχειριστή αντί να υποθέσετε ότι μια μεταγενέστερη κλήση setSSLContext θα αντικαταστήσει τα εσωτερικά του.

Αυτή η διάγνωση αφορά το τοπικό μητρώο σχημάτων. Μια πρόκληση ελέγχου ταυτότητας διαμεσολαβητή ή ένας απορριφθείς προορισμός είναι μεταγενέστερο, διαφορετικό αποτέλεσμα. Διατηρήστε και τις δύο καταχωρίσεις εργοστασίων όσο ερευνάτε αυτές τις απαντήσεις.

Σχετικά άρθρα