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 алдаа гарч болно. Проксид нэвтрэх нь туннелийн хүсэлтийг зөвшөөрдөг бөгөөд доторх сайтыг баталгаажуулдаггүй.
Давхарласан сокетыг автоматаар хаах идэвхтэй үед хаахад түүний тээвэр хаагдана. Гадна нөөцийн хүрээ нь хэвийн дуусахаас өмнө боох эсвэл гар барилт бүтэлгүйтвэл тэр тээврийг мөн хаана.