Если вы видели мой последний блог, вы знаете, что я перечислил десять вещей, которые вы можете сделать с помощью Spring Security . Однако, прежде чем вы начнете использовать Spring Security по-настоящему, первое, что вам действительно нужно сделать, — убедиться, что ваше веб-приложение использует правильный транспортный протокол, который в данном случае — HTTPS — ведь нет смысла иметь безопасный веб-сайт. если вы собираетесь транслировать пароли своих пользователей по всему Интернету в виде простого текста. Для настройки SSL есть три основных шага …
Создание хранилища ключей
Первое, что вам нужно, — это закрытое хранилище ключей, содержащее действительный сертификат, и самый простой способ сгенерировать один из них — использовать утилиту keytool Java, расположенную в каталоге $ JAVA_HOME / bin.
keytool -genkey -alias MyKeyAlias -keyalg RSA -keystore /Users/Roger/tmp/roger.keystore
В приведенном выше примере
- -alias — это уникальный идентификатор вашего ключа.
- -keyalg — алгоритм, используемый для генерации ключа. Большинство примеров, которые вы найдете в Интернете, обычно ссылаются на «RSA», но вы также можете использовать «DSA» или «DES».
- -keystore — необязательный аргумент, указывающий местоположение вашего файла хранилища ключей. Если этот аргумент отсутствует, то местоположением по умолчанию является каталог $ HOME.
алгоритма RC4 ), Adi Shamir и Leonard Adleman
DSA — алгоритм цифровой подписи,
DES — стандарт шифрования данных.
Для получения дополнительной информации о keytool и его аргументах ознакомьтесь с
этой
статьей Informit Джона Сведе.
Когда вы запустите эту программу, вам зададут несколько вопросов:
Roger$ keytool -genkey -alias MyKeyAlias -keyalg RSA -keystore /Users/Roger/tmp/roger.keystore Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: localhost What is the name of your organizational unit? [Unknown]: MyDepartmentName What is the name of your organization? [Unknown]: MyCompanyName What is the name of your City or Locality? [Unknown]: Stafford What is the name of your State or Province? [Unknown]: NA What is the two-letter country code for this unit? [Unknown]: UK Is CN=localhost, OU=MyDepartmentName, O=MyCompanyName, L=Stafford, ST=UK, C=UK correct? [no]: Y Enter key password for (RETURN if same as keystore password):
Большинство полей говорят сами за себя; однако для значений первого и второго имени я обычно использую имя машины — в данном случае localhost.
Обновление конфигурации Tomcat
Второй шаг в защите вашего приложения — убедиться, что у вашего кота есть SSL-коннектор. Для этого вам нужно найти файл конфигурации tomcat server.xml, который обычно находится в каталоге ‘conf’. Как только вы освоите это, и если вы используете tomcat, вам нужно будет раскомментировать:
… и сделать так, чтобы это выглядело примерно так:
<Connector SSLEnabled="true" keystoreFile="/Users/Roger/tmp/roger.keystore" keystorePass="password" port="8443" scheme="https" secure="true" sslProtocol="TLS"/>
Обратите внимание, что пароль «пароль» в виде простого текста, который не очень безопасен. Есть способы обойти это, но это выходит за рамки этого блога.
Если вы используете Spring tcServer, то обнаружите, что у него уже есть SSL-коннектор, который настроен примерно так:
<Connector SSLEnabled="true" acceptCount="100" connectionTimeout="20000" executor="tomcatThreadPool" keyAlias="tcserver" keystoreFile="${catalina.base}/conf/tcserver.keystore" keystorePass="changeme" maxKeepAliveRequests="15" port="${bio-ssl.https.port}" protocol="org.apache.coyote.http11.Http11Protocol" redirectPort="${bio-ssl.https.port}" scheme="https" secure="true"/>
… В этом случае это просто вопрос редактирования различных полей, включая keyAlias, keystoreFile и keystorePass.
Настройка вашего приложения
Если вы сейчас запустите tomcat и запустите свое веб-приложение, вы обнаружите, что оно доступно через HTTPS. Например,
введите https: // localhost: 8443 / my-app , но также и
http: // localhost: 8080 / my-app. Это означает, что вам также нужно выполнить некоторые jiggery-pokery в своем приложении, чтобы убедиться, что оно работает. только отвечает на HTTPS, и есть два подхода, которые вы можете использовать.
Если вы не используете Spring Security, вы можете просто добавить следующее в ваш файл web.xml перед последним тегом веб-приложения:
Если вы используете Spring Security, то есть еще несколько шагов, чтобы все заработало. Часть общих настроек Spring Security заключается в добавлении следующего в ваш файл web.xml. Сначала вам нужно добавить контекстный файл приложения Spring Security в contextConfigLocation context-param:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml /WEB-INF/spring/appServlet/application-security.xml </param-value> </context-param>
Во-вторых, вам нужно добавить фильтр Spring Security и сопоставление фильтров:
<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Наконец, вам нужно создать или отредактировать файл application-security.xml, как показано в очень минималистичном примере ниже:
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http auto-config='true' > <intercept-url pattern="/**" requires-channel="https" /> </http> <authentication-manager> </authentication-manager> </beans:beans>
В приведенном выше примере элемент intercept-url был настроен на перехват всех URL-адресов и заставляет их использовать канал https.
Приведенные выше сведения о конфигурации могут создать впечатление, что проще использовать простое изменение конфигурации web.xml, но если вы уже используете Spring Security, то это только вопрос добавления атрибута require-channel в существующую конфигурацию.
Пример приложения под названием tomcat-ssl, демонстрирующий вышесказанное, доступно на git hub по адресу:
https://github.com/roghughe/captaindebug.