Possiedo un server Web https al 100% che esegue la rinegoziazione TLS. Questo è molto utile in modo che gli utenti possano accedere al sito e ottenere delle belle pagine prima di fare clic sul pulsante di accesso e ricevere il loro certificato client. Qui di seguito è la parte del codice che fa rinegoziazione line 213-236 of X509Cert classNetty https (TLS) Durata sessione: perché è necessaria la rinegoziazione?
import org.jboss.netty.handler.ssl.SslHandler
val sslh = r.underlying.context.getPipeline.get(classOf[SslHandler])
trySome(sslh.getEngine.getSession.getPeerCertificates.toIndexedSeq) orElse {
if (!fetch) None
else {
sslh.setEnableRenegotiation(true) // todo: does this have to be done on every request?
r match {
case UserAgent(agent) if needAuth(agent) => sslh.getEngine.setNeedClientAuth(true)
case _ => sslh.getEngine.setWantClientAuth(true)
}
val future = sslh.handshake()
future.await(30000) //that's certainly way too long.
if (future.isDone && future.isSuccess)
trySome(sslh.getEngine.getSession.getPeerCertificates.toIndexedSeq)
else
None
}
}
Ora mi aspettavo che una volta che qualcuno si autentica con un certificato client X509 la seduta sarebbe durata un po 'di tempo e ricordare che la catena di certificati - dire 10 minuti o più, e in ogni caso almeno 1 minuto. Infatti è per questo che ho la possibilità di chiamare il metodo precedente con la variabile "fetch" impostata su false. Spero che se qualcuno autenticato la connessione non ha bisogno di essere rinegoziato.
Ma ho notato che con la maggior parte dei browser sembra che ho bisogno di chiamare sslh.handshake() ogni volta se voglio ottenere la sessione e restituire i certificati X509. Se "fetch" è impostato su false, in genere mi viene restituito None.
È normale o c'è qualcosa che sto sbagliando?
PS.
- il codice sopra è parte di un'implementazione della WebID protocol
- Questo utilizza netty 3.2.5Final. Ho provato anche con 3.2.7Final senza più fortuna.
- Quindi ho dovuto modificare il codice dello current service running the above code in modo che forzasse sempre un handshake (vedere the commit) Ma questo non mi dà la massima flessibilità che speravo di avere.