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 பிழை வரலாம். ப்ராக்ஸி உள்நுழைவு சுரங்கக் கோரிக்கைக்கு அதிகாரம் அளிக்கிறது, உள்ளேயுள்ள வலைத்தளத்தை அங்கீகரிக்கவில்லை.
தானியங்கி மூடுதல் இயக்கப்பட்ட நிலையில் அடுக்கப்பட்ட சாக்கெட்டை மூடுவது அதன் போக்குவரத்தை மூடுகிறது. சாதாரண நிறைவுக்கு முன் மடக்குதல் அல்லது கைக்குலுக்கல் தோல்வியடைந்தால் வெளிப்புற வள எல்லையும் அந்தப் போக்குவரத்தை மூடுகிறது.