2012-11-20 8 views
5

sto creando una semplice connessione HTTPS e restituendo una rispostaPlaintext connessione

URL google = new URL("https://www.google.com/"); 
HttpsURLConnection connection = (HttpsURLConnection)google.openConnection(); 
System.out.println("Response: " + connection.getResponseCode()); 

Questo funziona bene e ho ricevuto una risposta 200 (ho tutti gli archivi di chiavi e truststore ecc definiti)

Ho poi procura la richiesta attraverso un server Jetty utilizzando https.proxyPort = 8443 e https.proxyHost-localhost

il server dispone di connettori che assomigliano a questo:

Server server = new Server(); 
SelectChannelConnector connector0 = new SelectChannelConnector(); 
connector0.setPort(8080); 
SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(); 
sslConnector.setPort(8443); 
SslContextFactory cf = sslConnector.getSslContextFactory(); 
cf.setKeyStorePath(keyStoreHome); 
cf.setKeyStorePassword(keyStorePassword); 
cf.setTrustStore(trustStoreHome); 
cf.setTrustStorePassword(trustStorePassword); 
cf.setCertAlias("jetty"); 
server.setConnectors(new Connector[] {connector0, sslConnector}); 
server.setHandler(new HelloHandler()); 
server.start(); 
server.join(); 

che mi dà il seguente errore:

DEBUG: org.eclipse.jetty.io.nio - created [email protected]{l(/127.0.0.1:62348)<->r(/127.0.0.1:8443),d=false,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0}-{[email protected] SSL NOT_HANDSHAKING i/o/u=-1/-1/-1 ishut=false oshut=false {[email protected],g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}} 
DEBUG: org.eclipse.jetty.io.nio.ssl - [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=180/0/0 ishut=false oshut=false {[email protected],g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0} NOT_HANDSHAKING filled=180/180 flushed=0/0 
DEBUG: org.eclipse.jetty.io.nio.ssl - [email protected]{l(/127.0.0.1:62348)<->r(/127.0.0.1:8443),d=true,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0r}-{[email protected] SSL NEED_WRAP i/o/u=180/0/0 ishut=false oshut=false {[email protected],g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}} 
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 
at com.sun.net.ssl.internal.ssl.EngineInputRecord.bytesInCompletePacket(EngineInputRecord.java:152) 
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:806) 
at com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:721) 
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:607) 
at org.eclipse.jetty.io.nio.SslConnection.unwrap(SslConnection.java:519) 
at org.eclipse.jetty.io.nio.SslConnection.process(SslConnection.java:354) 
at org.eclipse.jetty.io.nio.SslConnection.access$900(SslConnection.java:43) 
at org.eclipse.jetty.io.nio.SslConnection$SslEndPoint.fill(SslConnection.java:661) 
at org.eclipse.jetty.http.HttpParser.fill(HttpParser.java:1030) 
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:275) 
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230) 
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77) 
at org.eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:191) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:620) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) 
at java.lang.Thread.run(Thread.java:662) 
DEBUG: org.eclipse.jetty.io.nio.ChannelEndPoint - close [email protected]{l(/127.0.0.1:62348)<->r(/127.0.0.1:8443),d=true,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0!}-{[email protected] SSL NEED_WRAP i/o/u=180/0/0 ishut=false oshut=false {[email protected],g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}} 
DEBUG: org.eclipse.jetty.http.HttpParser - 

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

Qualcuno può per favore mi dica quello che potrebbe essere sbagliato in questo?

risposta

0

L'aspetto si verifica quando il proxy sta connettendo l'HTTP - 8080 e HTTPS - 8443. JETTY esegue la decrittografia tra quelle porte perché, in caso contrario, l'8080 è rappresentato da testo normale.

0

Questo è più o meno lo stesso problema di this question.

Quando si utilizza https.proxyPort=8443 e https.proxyHost=localhost, la connessione tra il client e l'host/porta proxy non viene eseguita tramite SSL/TLS, ma in testo normale HTTP. Il client invia quindi al proxy una richiesta CONNECT con il nome host di destinazione (e in questo modo si ottiene questa eccezione "plain text").

Quindi, il proxy inoltra una richiesta a tale server di destinazione e stabilisce un tunnel che trasmette tutto il traffico non elaborato. Dal punto di vista del cliente (HttpsUrlConnection), il socket connesso al proxy viene aggiornato a SSL/TLS (cioè avvia un handshake, che viene inoltrato al server di destinazione tramite quel tunnel.

Non ci sono molti client che supportano anche la connessione tra il client e il proxy stesso tramite HTTPS. Questo in genere non è molto utile, poiché un utente malintenzionato potrebbe comunque vedere solo il nome host e la porta

Problemi correlati