2013-04-18 2 views
3

Я следовал довольно полезному онлайн-учебному пособию по созданию мыльного сервера, который использовал mysql для вызова хранимой процедуры. Это работало довольно хорошо, и я получил код, который бы корректно ответил на использование программы, такой как SoapUI. Код, как показано ниже:Использование SSL с мылом на Java, без сервлета

@WebService 
public class test { 

@WebMethod 
public String login(String username, String password) throws SQLException { 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String DBusername = "test"; 
    String DBpassword = "test"; 
    Connection con = DriverManager.getConnection(url, DBusername, DBpassword); 

    Statement stmt = null; 
    String query = " CALL authorize_user('" + username + "','" + password + "')"; 

    try { 
     stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 
     while (rs.next()) { 
      String login = rs.getString("au_result"); 

      if (login != null) 
       return login; 
      else { 
       return "Login Failed"; 
      } 
     } 
    } catch (SQLException e) { 
     System.out.println("Error: " + e); 
    } finally { 
     if (stmt != null) { 
      stmt.close(); 
     } 
    } 
    return "Login Failed"; 
} 

public static void main(String[] args) { 
    test test = new test(); 
    @SuppressWarnings("unused") 
    Endpoint endpoint = Endpoint.publish("http://localhost/testing", test); 
} 

}

Так что это работает, когда вы кладете в имя пользователя и пароль, который в БД будет возвращать положительный результат. Это всего лишь тестовый код из-за возможности впрыска в код так, как он был настроен сейчас, но это скоро будет изменено.

Однако я пытаюсь найти способ использования SSL для этого сервера, и единственная информация, которую я могу найти, - это использование SSL при использовании программы-обертки или какой-либо оболочки сервлетов для создания мыльного сервера. Мы не хотим идти этим путем, пока мы не найдем очень вескую причину, чтобы тратить время на изучение нового кода. Как я могу использовать SSL-соединение для этого кода, не используя какой-либо сторонний код? У нас уже есть сертификат от авторитетной компании, которая работает на нашем сервере для нашего обычного веб-сайта.

+3

Вы видели это: http://stackoverflow.com/questions/4621313/using-javax-xml-ws-endpoint-with-https? – efan

+1

Не забудьте позвонить .close() в Connection;) –

ответ

3

Вы считаете не программирующее решение?

Просто установите Apache с SSL в качестве обратного прокси до вашего веб-сервера.

  • Вам не нужно писать ни строчки кода (меньше возможностей для ошибок безопасности)
  • Вы получаете SSL
  • Вы получаете балансир (если вам это нужно)
  • Вы получаете кэширование (если вам это нужно) и так далее
0

вы должны попытаться использовать Handler цепь, таким образом, цепь обработчика будет выполняться перед любым из ваших мыльных звонков, и вы можете отказаться от любого сообщения, это не распространяется приспосабливать к любой вещи вы хотите t o делаю.

Более подробную информацию о Howto здесь: http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_jaxwshandler.html

1

Вы включили код, который подключается к базе данных для проверки ID пользователя и пароль (последний шаг в моем примере ниже), который является своего рода запутанным, потому что, как я понимаю, что это не с чем вам нужна помощь. Позвольте мне сначала понять вашу архитектуру (надеюсь, именно так мы ВСЕ начинаем проектирование архитектуры данных для защиты магазинов идентификаторов пользователей).

web-app -> user authentication client 
    ---->{SOAP CALL}---> 
     SSL-proxy-of-some-sort -> SOAP server -> User Authentication Service -> user ID database. 

Это правильное представление? Если да, я предполагаю, что вы хотите сохранить хранилище паролей пользователей в отдельном хранилище данных, скрытое за брандмауэрами и доступное только с использованием SOAP, чтобы избежать ситуации «Living Social» (50 миллионов идентификаторов пользователей и паролей похищены хакерами), где нет возможность того, что хакеры могут получить доступ к хранилищу данных через некоторую мягкую SQL-инъекцию или другие уязвимости. Если это правильное понимание?

Теперь, по большей части, я согласен с ответом Виктора Ронина выше, что вы должны рассмотреть возможность использования сервера Apache с SSL для входа на ваш «мыльный сервер». Однако даже для доступа к этому серверу SOAP с оболочкой SSL (неважно, как вы это делаете) вам все равно придется писать код Java, который может обрабатывать эту связь SSL. Я предлагаю вам изучить этот пост (не мой), чтобы узнать, помогает ли это.

http://juliusdavies.ca/commons-ssl/ssl.html

Кстати, если вы собираетесь через глобальную сеть для этой аутентификации, я не могу себе представить, нуждающихся шифрования SSL.

Смежные вопросы