Llevo muchos dias haciendo pruebas, buscando por media internet y no logro escribir un socket https.
- Tengo un PROXY echo en java el cual responde peticiones http, es decir un cliente se conecta a mi proxy y le envia la pagina solicitada. El problema es cuando un cliente ingresa una web como por ejemplo GOOGLE (https)... A este cliente no puedo escribirlo pero si leerlo (encabezados y body) por medio de X509TrustManager.
Pero como escribo un sockets https? D:
Este es el codigo para obtener el body de web https:
Código:
Saludos! import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class SSL_Prueba { public static void main(String[] args) { try { SSLContext sslContext = SSLContext.getInstance("SSL"); // set up a TrustManager that trusts everything sslContext.init(null, new TrustManager[]{new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { //System.out.println("getAcceptedIssuers ============="); return null; } @Override public void checkClientTrusted(X509Certificate[] certs, String authType) { // System.out.println("checkClientTrusted ============="); } @Override public void checkServerTrusted(X509Certificate[] certs, String authType) { //System.out.println("checkServerTrusted ============="); } }}, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory( sslContext.getSocketFactory()); HttpsURLConnection .setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { System.out.println("hostnameVerifier ============="); return true; } }); URL url = new URL("https://www.google.com.ar"); URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line, result = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (NoSuchAlgorithmException | KeyManagementException | IOException e) { System.out.println(e.getMessage()); } } }