Я пытаюсь получить grizzly для использования шифрования SSL и все еще отлично работаю с Джерси. Я смотрел по всему Интернету, и я нахожу всевозможные попытки SSL с Grizzly и Jersey. Похоже, что есть разные способы сделать это в зависимости от того, какую версию вы используете, и как вы решили ее реализовать. Я еще не смог получить какие-либо примеры для работы с моим кодом.SSL с Grizzly и Jersey
Вот как я начинаю мой сервер:
static HttpServer startSecureServer() throws IOException{
ResourceConfig rc=new PackagesResourceConfig("server.grizzlyresources");
SSLContextConfigurator sslCon=new SSLContextConfigurator();
sslCon.setKeyStoreFile(ConfigLoader.getKeystoreLocation()); // contains server keypair
sslCon.setKeyStorePass(ConfigLoader.getKeystorePassword());
System.out.println("Starting server on port "+ConfigLoader.getHttpsServerPort());
HttpServer secure=GrizzlyServerFactory.createHttpServer(BASE_URI_SECURED, rc);
secure.stop();
HashSet<NetworkListener> lists=new HashSet<NetworkListener>(secure.getListeners());
for (NetworkListener listener : lists){
listener.setSecure(true);
SSLEngineConfigurator ssle=new SSLEngineConfigurator(sslCon);
listener.setSSLEngineConfig(ssle);
secure.addListener(listener);
System.out.println(listener);
}
secure.start();
return secure;
}
private static URI getBaseURISecured(){
return UriBuilder.fromUri("https://0.0.0.0/").port(ConfigLoader.getHttpsServerPort()).build();
}
private static final URI BASE_URI_SECURED = getBaseURISecured();
ConfigLoader загружает в информации из конфигурационного файла. Когда я запускаю этот код, он запускает сервер, он находит ресурсы в пакете server.grizzlyresources, и он отлично работает! За исключением одного. Сервер не защищен. Я могу подключиться к нему telnet и отправить HTTP-запрос в текстовом виде для одного из моих ресурсов, и он вернет его. Таким образом, код работает для запуска сервера, но вся его часть SSL просто обойдена. Любые идеи, как это исправить или почему это может быть сделано?
Вот вывод на консоль, когда я запускаю его:
Starting server on port 9999
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
server.grizzlyresources
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class server.grizzlyresources.SessionResource
class server.grizzlyresources.LoginResource
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Jan 13, 2014 9:51:08 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.12 02/15/2012 04:51 PM'
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [0.0.0.0:9999]
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.NetworkListener stop
INFO: Stopped listener bound to [0.0.0.0:9999]
NetworkListener{name='grizzly', host='0.0.0.0', port=9999, secure=true}
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [0.0.0.0:9999]
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Я использую Grizzly 2.2.1 и Джерси 1.12.
Спасибо!
Спасибо за ответ! Это не работает, но это привело меня к поисковому пути, который, я надеюсь, приведет к решению. Теперь сервер начинает защищаться, но он умирает при рукопожатии, когда я пытаюсь использовать 'openssl s_client -connect localhost: 9999'. Я думаю, что мне просто нужно перенести все на самую новую версию Джерси, которая резко отличается от Джерси 1.12, как я понимаю. Я отправлю сообщение, если выясню это. – user1389906
Вы можете включить отладку SSL: «-Djavax.net.debug = all» и посмотреть, почему сбой управления не получается – alexey
Большое спасибо! Информация об отладке показала, что она пытается аутентифицировать клиента (чего я не хотел делать). Просматривая документацию на гризли, я обнаружил, что при построении SSLEngineConfigurator я могу передать логические строки, говоря им, чтобы не проверять подлинность клиента. Вот так! – user1389906