Kituo cha SOCKS kinakufikisha kwenye tovuti. Mshirika wa TLS ndani ya muunganisho huo ni tovuti yenyewe, kwa hivyo pitisha jina la mwenyeji wa lengwa kwa kiwanda cha soketi kilichowekwa tabaka:

String destination = "example.com";
int destinationPort = 443;
Proxy proxy = new Proxy(
    Proxy.Type.SOCKS,
    new InetSocketAddress("127.0.0.1", 1080)
);

try (Socket transport = new Socket(proxy)) {
    transport.connect(
        InetSocketAddress.createUnresolved(destination, destinationPort),
        5000
    );
    SSLSocketFactory factory =
        (SSLSocketFactory) SSLSocketFactory.getDefault();
    try (SSLSocket tls = (SSLSocket) factory.createSocket(
            transport, destination, destinationPort, true)) {
        SSLParameters parameters = tls.getSSLParameters();
        parameters.setEndpointIdentificationAlgorithm("HTTPS");
        tls.setSSLParameters(parameters);
        tls.setSoTimeout(15000);
        tls.startHandshake();
        // Send the application's HTTPS request through tls.
    }
}

Kipande hiki kinadhani uingizaji wa kawaida wa Java networking na TLS, usanidi wa imani chaguo-msingi uliopo na muunganisho wa SOCKS usiohitaji vitambulisho vya proksi. Kinafanya makubaliano ya mkono; programu bado inahitaji kutuma ombi la HTTP kwa muundo unaotarajiwa na seva. Kwa malengo ya HTTPS ya umma kwenye njia za umma zinazoruhusiwa, orodha ya proksi za SOCKS inatoa vituo vinavyowezekana; linganisha toleo la seva na usaidizi wa jina la mwenyeji na njia hii ya soketi ya Java.

Soma utambulisho mbili katika mfano

127.0.0.1:1080 ni kituo cha proksi, kinachofikiwa kutoka mchakato huu wa Java. destination na destinationPort hutambua tovuti. createUnresolved huhifadhi jina hilo la mwenyeji kwa njia ya SOCKS badala ya kulitatua mapema kwa mteja.

createSocket iliyowekwa tabaka hupokea utambulisho wa lengwa. setEndpointIdentificationAlgorithm("HTTPS") huomba kwa uwazi ukaguzi wake wa jina la mwenyeji. Imani ya mnyororo wa vyeti vya SSLSocket mbichi haithibitishi yenyewe kwamba uthibitishaji wa jina la mwenyeji umewezeshwa. Kubadilisha jina la proksi au loopback ili kukandamiza kutolingana kunaweza kuthibitisha kituo kisichofaa.

Weka imani na usafishaji pamoja na hatua zao

Kiwanda chaguo-msingi hutumia mpangilio wa imani uliosanidiwa wa JVM. Programu yenye mahitaji ya kibinafsi inaweza badala yake kutumia kiwanda chake cha SSLContext kilichoanzishwa ipasavyo. Chaguo hilo limetenganishwa na njia ya SOCKS; msimamizi wa imani anayekubali kila cheti harekebishi jina lisilofaa la mshirika.

Kukataliwa kwa SOCKS hutokea kabla ya TLS; cheti kisichoaminika au jina lisilofaa la mwenyeji hushindwa wakati wa TLS; hitilafu ya HTTP inaweza kufuata baadaye. Kuingia kwenye proksi kunuidhinisha ombi la handaki badala ya kuthibitisha tovuti iliyo ndani.

Kufunga soketi iliyowekwa tabaka wakati kufunga kiotomatiki kumewezeshwa hufunga usafirishaji wake. Wigo wa rasilimali wa nje pia hufunga usafirishaji huo ikiwa ufungashaji au makubaliano ya mkono yatashindwa kabla ya kukamilika kwa kawaida.

Makala zinazohusiana