SOCKS üzerinden Java TLS için hedefin kimliğini kullanın
Önce SOCKS ile bağlanın, ardından SSLSocket'i sitenin ana bilgisayar adı ve açık HTTPS uç noktası denetimleriyle katmanlayın.
SOCKS uç noktası sizi siteye ulaştırır. O bağlantının içindeki TLS eşi sitenin kendisidir, bu yüzden hedefin ana bilgisayar adını katmanlı soket fabrikasına verin:
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.
}
}Parça, standart Java ağ ve TLS içe aktarımlarını, mevcut varsayılan güven yapılandırmasını ve proxy kimlik bilgisi gerektirmeyen bir SOCKS bağlantısını varsayar. El sıkışmayı gerçekleştirir; uygulamanın yine de sunucunun beklediği biçimde bir HTTP isteği göndermesi gerekir. İzin verilen genel yollar üzerindeki genel HTTPS hedefleri için SOCKS proxy listesi aday uç noktalar sunar; sunucunun sürümünü ve ana bilgisayar adı desteğini bu Java soket yoluna uyarlayın.
Örnekteki iki kimliği okuyun
127.0.0.1:1080 proxy uç noktasıdır ve bu Java sürecinden erişilebilir. destination ve destinationPort siteyi tanımlar. createUnresolved bu ana bilgisayar adını istemcide erkenden çözümlemek yerine SOCKS yolu için saklar.
Katmanlı createSocket hedefin kimliğini alır. setEndpointIdentificationAlgorithm("HTTPS") ana bilgisayar adı denetimlerini açıkça ister. Ham bir SSLSocket'in sertifika zinciri güveni, ana bilgisayar adı doğrulamasının etkin olduğunu tek başına kanıtlamaz. Uyuşmazlığı bastırmak için proxy adını veya loopback'i değiştirmek yanlış uç noktayı doğrulayabilir.
Güveni ve temizliği kendi aşamalarında tutun
Varsayılan fabrika JVM'in yapılandırılmış güven düzenini kullanır. Özel gereksinimleri olan bir uygulama bunun yerine uygun şekilde başlatılmış SSLContext fabrikasını kullanabilir. Bu seçim SOCKS yolundan ayrıdır; her sertifikayı kabul eden bir güven yöneticisi yanlış eş adını düzeltmez.
SOCKS reddi TLS'ten önce gerçekleşir; güvenilmeyen bir sertifika veya yanlış ana bilgisayar adı TLS sırasında başarısız olur; ardından bir HTTP hatası gelebilir. Proxy oturum açma işlemi tünel isteğini yetkilendirir, içindeki siteyi doğrulamaz.
Katmanlı soketi otomatik kapatma etkinken kapatmak taşımasını kapatır. Dış kaynak kapsamı da normal tamamlanmadan önce sarma veya el sıkışma başarısız olursa o taşımayı kapatır.