استخدم هوية الوجهة لـ Java TLS عبر SOCKS
اتصل عبر SOCKS أولاً، ثم أضف طبقة SSLSocket باسم مضيف الموقع وفحوصات صريحة لنقطة نهاية HTTPS.
نقطة نهاية 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 networking و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. تسجيل الدخول إلى الوسيط يصرّح بطلب النفق بدلاً من توثيق الموقع داخله.
إغلاق المقبس المطبق مع تفعيل الإغلاق التلقائي يغلق ناقله. ونطاق المورد الخارجي يغلق ذلك الناقل أيضًا إذا فشل التغليف أو المصافحة قبل الاكتمال الطبيعي.