Hola foreros les hago una pregunta.
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:
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());
}
}
}
Saludos!