Setup: Spring Boot 1.4.1Jetty HTTP2 délai de connexion SSL Client
dépendances Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-client</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-io</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-client</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.alpn</groupId>
<artifactId>alpn-api</artifactId>
<version>1.1.3.v20160715</version>
</dependency>
Factory SSL:
public static SslContextFactory createSslContextFactory(String trustKeyStorePath, String trustKeyStorePass, String keyStorePath, String keyStorePass, String keyManagerPass) throws Exception {
// logger.info("Creating SSL factory");
System.out.println("Creating SSL factory");
SslContextFactory sslContextFactory = new SslContextFactory(true);
try (FileInputStream trustKeyStoreStream = new FileInputStream(trustKeyStorePath);
FileInputStream keyStoreStream = new FileInputStream(keyStorePath)) {
KeyStore truststore = KeyStore.getInstance(KeyStore.getDefaultType());
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
truststore.load(trustKeyStoreStream, trustKeyStorePass.toCharArray());
keystore.load(keyStoreStream, keyStorePass.toCharArray());
sslContextFactory.setTrustAll(false);
sslContextFactory.setTrustStore(truststore);
sslContextFactory.setKeyStore(keystore);
sslContextFactory.setKeyManagerPassword(keyManagerPass);
} catch (KeyStoreException e) {
// logger.error("Keystore error", e);
e.printStackTrace();
throw e;
} catch (IOException | NoSuchAlgorithmException | CertificateException e) {
// logger.error("Key loading error", e);
e.printStackTrace();
throw e;
}
return sslContextFactory;
}
L'extrait de connexion:
this.client = new HTTP2Client();
client.setIdleTimeout(-1);//disable client session timeout
try {
client.addBean(this.sslContextFactory);
client.start();
System.out.println("Connecting on " + this.host + ":" + this.port);
FuturePromise<Session> sessionPromise = new FuturePromise<>();
client.connect(sslContextFactory, new InetSocketAddress(this.host, this.port), new NEADSessionListener(clientInstanceName, this), sessionPromise);
this.session = sessionPromise.get(5, TimeUnit.SECONDS);
} catch (...) {
Je cours en utilisant
-Xbootclasspath/p:/path/to/alpn-boot-8.1.10.v20161026.jar
qui est la version appropriée pour ma machine virtuelle Java.
Le résultat est
java.util.concurrent.TimeoutException
at org.eclipse.jetty.util.FuturePromise.get(FuturePromise.java:130)
Réglage de l'enregistreur de la jetée sur le débogage n'a pas aidé beaucoup, les derniers éléments consignés sont:
2017-07-21 04:44:51.483 DEBUG 18323 --- [tp1224347463-26] org.eclipse.jetty.io.FillInterest : [email protected]{true,[email protected]{[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]<[email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=0/-1}{io=0/0,kio=0,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]}} register [email protected]{[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]<[email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=0/-1}{io=0/0,kio=0,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]}
2017-07-21 04:44:51.483 DEBUG 18323 --- [tp1224347463-26] org.eclipse.jetty.io.ChannelEndPoint : changeInterests p=false 0->1 for [email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=0/-1}{io=0/1,kio=0,kro=1}->[email protected]29ab178d{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-26] org.eclipse.jetty.io.ManagedSelector : Queued change CEP:[email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=0/-1}{io=0/1,kio=0,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]:runUpdateKey:NON_BLOCKING on [email protected] id=0 keys=1 selected=0
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-29] org.eclipse.jetty.io.ManagedSelector : Selector loop woken up from select, 0/1 selected
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-26] org.eclipse.jetty.io.ssl.SslConnection : onFillable exit [email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=1/-1}->[email protected]>[email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=1/-1}{io=0/1,kio=0,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-29] org.eclipse.jetty.io.ManagedSelector : Running action CEP:[email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=1/-1}{io=0/1,kio=0,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]:runUpdateKey:NON_BLOCKING
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-26] o.e.j.u.t.Invocable$InvocableExecutor : [email protected]2f invoked CEP:[email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=1/-1}{io=0/1,kio=0,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]:runFillable:BLOCKING
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-26] o.e.j.u.thread.strategy.EatWhatYouKill : [email protected]/[email protected]/PRODUCING/1/1 produce exit
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-29] org.eclipse.jetty.io.ChannelEndPoint : Key interests updated 0 -> 1 on [email protected]{nead.2.addr/10.203.6.184:9443<->/192.168.111.11:41652,OPEN,fill=FI,flush=-,to=1/-1}{io=1/1,kio=1,kro=1}->[email protected]{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>[email protected]
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-26] o.e.jetty.util.thread.QueuedThreadPool : ran [email protected]/[email protected]/PRODUCING/1/1
2017-07-21 04:44:51.484 DEBUG 18323 --- [tp1224347463-29] org.eclipse.jetty.io.ManagedSelector : Selector loop waiting on select
Notez que la connexion au même serveur, en utilisant le mêmes touches, travaille à partir d'un autre logiciel.
Il n'y a pas assez d'informations. Le serveur est-il correctement configuré pour exécuter HTTP/2? Si vous pouvez facilement reproduire, pouvez-vous s'il vous plaît ouvrir un problème à https://github.com/eclipse/jetty.project/issues et joindre un cas de test reproductible? Merci ! – sbordet
Merci. Imaginé finalement que c'était juste la façon dont nous avons chargé le projet. L'IDE ajoutait -Xbootclasspath à la fin au lieu d'avant -jar .... Ce serait bien si l'erreur lancée par le client était un peu plus spécifique, puisque, évidemment, il était incapable de négocier la connexion en l'absence d'ALPN. – Deroude