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 катасы келиши мүмкүн. Проксиге кирүү туннель сурамына уруксат берет, ичиндеги сайтты аутентификациялабайт.
Катмарланган сокетти автоматтык жабуу күйгүзүлгөн абалда жабуу анын ташуусун жабат. Сырткы ресурс чөйрөсү да кадимки аяктоого чейин ороп же кол кармашуу ишке ашпаса, ошол ташууну жабат.