2013-02-20 11 views
7

Semplice implementazione di Https del server https che utilizza javax.net.ssl, con un certificato autofirmato. Il server è attivo, quindi viene effettuata una richiesta utilizzando DHC by Restlet. Sul lato server ottengo:javax.net.ssl, client https e close_notify

io.netty.handler.ssl.SslHandler setHandshakeFailure ATTENZIONE: SSLEngine.closeInbound() ha sollevato un'eccezione a causa di connessione chiusa. javax.net.ssl.SSLException: chiuso in ingresso prima di ricevere peer close_notify: possibile attacco di troncamento? a sun.security.ssl.Alerts.getSSLException (fonte sconosciuta) a sun.security.ssl.SSLEngineImpl.fatal (fonte sconosciuta) a sun.security.ssl.SSLEngineImpl.fatal (fonte sconosciuta) al sole. security.ssl.SSLEngineImpl.closeInbound (sorgente sconosciuta) su io.netty.handler.ssl.SslHandler.setHandshakeFailure (SslHandler.java:905) su io.netty.handler.ssl.SslHandler.channelInactive (SslHandler.java:576) a io.netty.channel.DefaultChannelHandlerContext.invokeChannelInactive (DefaultChannelHandlerContext.java:819) a 1300 io.netty.channel.DefaultChannelHandlerContext.access $ (DefaultChannelHandlerContext.java:38) a io.netty.channel.DefaultChannelHandlerContext $ 5.run (DefaultChannelHandlerContext.j ava: 808) a io.netty.channel.SingleThreadEventExecutor.runAllTasks (SingleThreadEventExecutor.java:259) a io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:305) a io.netty.channel. SingleThreadEventExecutor $ 2.run (SingleThreadEventExecutor.java:110) a java.lang.Thread.run (fonte sconosciuta)

E sul lato client:

Nessuna risposta. Il certificato è valido? Clicca qui per verificare.

Emissione della stessa richiesta nella barra degli indirizzi di Chrome, la stessa eccezione lato server. Pubblicando lo stesso nella barra degli indirizzi di Firefox, la stessa eccezione è che Firefox visualizza la sua pagina di avviso sul certificato che non proviene da una CA attendibile. Questa eccezione sembra molto generica e non indica direttamente lo stato del protocollo. Significa che questi 3 client (Chrome, Firefox, DHC by Restlet), non stanno giocando bene il protocollo e stanno semplicemente scomparendo sul server piuttosto che inviare un close_notify? o è un comportamento lato client imposto da RFC SSL o solo un design lato client orientato alla sicurezza?

+0

Sembra che tutti i client che ho provato saltino l'invio di close_notify. Forse è giusto che il cliente si lasci andare subito, anche se lascia il server un po 'perplesso su quale possa essere la ragione dettagliata ... – matanster

+0

Ciao Matt. Sto facendo una richiesta https da Dev HTTP Client e ho la stessa situazione sul lato client. Come lo hai gestito? –

+0

@AntonioAcevedo, sembra che i client comuni si comportino nel modo seguente quando si connettono a un certificato non affidabile: chiudono la connessione e richiedono all'utente. Quindi tutto il server vede che il client scompare su di loro, ma il client non notifica al server la sua ragione. Ciò ha senso dal punto di vista della sicurezza dal punto di vista del cliente (fornire una minima quantità di informazioni su un problema di sicurezza a una seconda parte è una buona pratica). Quindi questa situazione non richiede 'risolvere' ma solo accettarla come un dato. – matanster

risposta

5

mi hanno contattato con DHC by Restlet squadra e mi hanno detto una soluzione:

Chrome non fornisce un'API per la gestione dei certificati. In altre parole, non abbiamo API per accettare automaticamente il certificato né un modo per aumentare la finestra di dialogo 'certificato non attendibile'. Tuttavia, è possibile utilizzare una piccola soluzione:

  1. Aprire l'URL https in un'altra scheda.
  2. Accettare manualmente il certificato.
  3. Torna a DHC e funzionerà perché il certificato è stato accettato manualmente (è memorizzato in Chrome) dal passaggio precedente.

Di solito devi farlo solo una volta.

+0

Cool solution. Penso che possa adattarsi in quanto è proprio 'rispondi alla tua domanda' come la domanda originale qui era il motivo e se anzi close_notify non è stato inviato da client popolari .... soluzione cool! felice di aiutare! – matanster

1

Ho affrontato questo problema quando stavo installando aperta versione JDK di Java su macchine Linux, quando ho cambiato la versione Java per Oracle JDK il problema è scomparso.

L'applicazione esatto che ha gettato questa eccezione sono informazioni Workbench (ops liquido prodotto) e la versione Java è stato 8 Utilizzando la versione di Java non è stato mentiond in prerequists sistema OPS fluidi persone.