J'essaie d'obtenir un serveur Grizzly très basique pour permettre des connexions SSL (HTTPS) unidirectionnelles pour accéder aux services REST de jax-rs. Finalement, je veux une sécurité SSL bidirectionnelle. J'ai passé en revue de nombreux exemples et je ne peux rien obtenir pour travailler. Je continue de courir dans une erreur SSL Handshake. Clairement, je dois faire quelque chose de stupide. Toute aide est appréciée.Comment configurer la configuration de base Jersey/Grizzly 2.21 de démarrage SSL
Voici mon code pour démarrer mon serveur Grizzly embarqué en utilisant les classes wrapper Jersey:
public static HttpServer startHttpsServer(URI listenerURI) throws IOException {
ResourceConfig resourceConfig = new ResourceConfig().packages("ws.argo.experiment.ssl");
// First I tried this configuration using the certs from the Jersey sample code
// Grizzly ssl configuration
SSLContextConfigurator sslContext = new SSLContextConfigurator();
// set up security context
sslContext.setKeyStoreFile("./src/main/resources/keystore_server"); // contains server keypair
sslContext.setKeyStorePass("asdfgh");
sslContext.setTrustStoreFile("./src/main/resources/truststore_server"); // contains client certificate
sslContext.setTrustStorePass("asdfgh");
// Then I tried just using a default config - didn't work either
// sslContext = SSLContextConfigurator.DEFAULT_CONFIG;
if (!sslContext.validateConfiguration(true)) {
LOGGER.severe("Context is not valid");
}
LOGGER.finer("Starting Jersey-Grizzly2 JAX-RS secure server...");
HttpServer httpServer; //= GrizzlyHttpServerFactory.createHttpServer(listenerURI, resourceConfig, false);
httpServer= GrizzlyHttpServerFactory.createHttpServer(
listenerURI,
resourceConfig,
true,
new SSLEngineConfigurator(sslContext).setClientMode(false).setNeedClientAuth(false)
);
httpServer.getServerConfiguration().setName("Test HTTPS Server");
httpServer.start();
LOGGER.info("Started Jersey-Grizzly2 JAX-RS secure server.");
return httpServer;
}
J'ai aussi essayé remplacé SSLEngineConfigurator (SSLContext) .setClientMode (false) .setNeedClientAuth (false) avec null pour voir si Cela aiderait. Nan.
je reçois toujours l'erreur suivante:
grizzly-nio-kernel(3) SelectorRunner, fatal error: 40: no cipher suites in common
javax.net.ssl.SSLHandshakeException: no cipher suites in common
%% Invalidated: [Session-2, SSL_NULL_WITH_NULL_NULL]
grizzly-nio-kernel(3) SelectorRunner, SEND TLSv1.2 ALERT: fatal, description = handshake_failure
grizzly-nio-kernel(3) SelectorRunner, WRITE: TLSv1.2 Alert, length = 2
grizzly-nio-kernel(3) SelectorRunner, fatal: engine already closed. Rethrowing javax.net.ssl.SSLHandshakeException: no cipher suites in common
Vous n'avez besoin que du certificat client dans le magasin de confiance du serveur pour le protocole SSL mutuel (bidirectionnel). Si le certificat du serveur est auto-signé, vous devez ajouter le certificat du serveur au magasin de confiance du client. –
Jetez un coup d'œil à [cet exemple] (https://github.com/jersey/jersey/tree/master/ examples/https-clientserver-grizzly) –
@peetskillet - c'est l'exemple avec lequel j'ai commencé. La seule différence est que je n'utilise pas la configuration jersey-container-grizzly2-servlet. Juste en utilisant la version régulière de jersey-container-grizzly2-http comme une dépendance. Je ne pense pas que cela ferait une différence. – jmsimpson68