SOCKS арқылы Java TLS үшін межелінің идентификациясын пайдаланыңыз
Алдымен SOCKS арқылы қосылыңыз, содан кейін сайттың хост атымен және HTTPS соңғы нүктесін анық тексерумен SSLSocket қабатын қосыңыз.
SOCKS соңғы нүктесі сізді сайтқа жеткізеді. Сол қосылымның ішіндегі TLS серіктесі — сайттың өзі, сондықтан межелінің хост атын қабатталған сокет фабрикасына беріңіз:
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.
}
}Бұл үзінді стандартты Java желі және TLS импорттарын, бар әдепкі сенім конфигурациясын және прокси тіркелгі деректерін қажет етпейтін SOCKS қосылымын болжайды. Ол қол алысуды орындайды; қолданба әлі де сервер күтетін форматта HTTP сұрауын жіберуі керек. Рұқсат етілген қоғамдық маршруттардағы қоғамдық HTTPS мақсаттары үшін SOCKS прокси тізімі кандидат соңғы нүктелерді ұсынады; сервер нұсқасы мен хост атын қолдауды осы Java сокет жолына сәйкестендіріңіз.
Мысалдағы екі идентификацияны оқыңыз
127.0.0.1:1080 — проксидің соңғы нүктесі, осы Java процесінен қол жетімді. destination мен destinationPort сайтты анықтайды. createUnresolved бұл хост атын клиентте ерте шешудің орнына SOCKS жолы үшін сақтайды.
Қабатталған createSocket межелінің идентификациясын қабылдайды. setEndpointIdentificationAlgorithm("HTTPS") оның хост атын тексерулерін анық талап етеді. Шикі SSLSocket-тің сертификат тізбегіне сену хост атын тексерудің қосылғанын өздігінен дәлелдемейді. Сәйкессіздікті басу үшін прокси атын немесе loopback-ты ауыстыру қате соңғы нүктені аутентификациялауы мүмкін.
Сенім мен тазалауды өз кезеңдерінде ұстаңыз
Әдепкі фабрика JVM-нің конфигурацияланған сенім тәртібін пайдаланады. Жеке талаптары бар қолданба оның орнына дұрыс инициализацияланған SSLContext фабрикасын пайдалана алады. Бұл таңдау SOCKS маршрутынан бөлек; әр сертификатты қабылдайтын сенім менеджері қате серіктес атын түзетпейді.
SOCKS бас тартуы TLS-тен бұрын орын алады; сенімсіз сертификат немесе қате хост аты TLS кезінде сәтсіз аяқталады; одан кейін HTTP қатесі болуы мүмкін. Проксиге кіру туннель сұрауын рұқсат етеді, ішіндегі сайтты аутентификацияламайды.
Қабатталған сокетті автоматты жабу қосылған күйде жабу оның тасымалын жабады. Сыртқы ресурс аумағы да қалыпты аяқталуға дейін қаптау немесе қол алысу сәтсіз болса, сол тасымалды жабады.