Обеспечение доступа к приложению по протоколу SSL (HTTPs)

Особенности настройки HTTPs для приложения

HTTPS (HyperText Transfer Protocol Secure) — расширение протокола HTTP с поддержкой шифрования. Данные, передаваемые по протоколу HTTPS, "упаковываются" в криптографический протокол SSL или TLS. Он обеспечивает защиту от атак, основанных на прослушивании сетевого соединения — от снифферских атак и атак типа man-in-the-middle, при условии, что будут использоваться шифрующие средства, сертификат сервера проверен и ему доверяют.

Если доступ к приложению осуществляется через недоверенные сети (например, Интернет), рекомендуется использовать соединение по HTTPs.

Для настройки HTTPs необходимо:

  • Получить SSL-сертификат для доменного имени, на котором размещается приложение.
  • Настроить Tomcat или proxy сервер (nginx, Apache, IIS) на работу по HTTPs.

Получение SSL-сертификата

Пути получения SSL-сертификата для доменного имени:

  • Приобрести в любом доверенном центре сертификации, пройдя процедуру валидации.
  • Получить бесплатно в некоторых центрах сертификации.
  • Сгенерировать самостоятельно (самоподписанный сертификат).
  • Получить у администратора удостоверяющего центра, если в организации развернута инфраструктура открытых ключей (PKI) и имеется свой удостоверяющий центр.

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

Требования к сертификату для работы по HTTPs:

  • Сертификат должен иметь формат pem (plain-text, для использования в tomcat, nginx, apache) либо pfx (для использования в IIS).
  • Приватный ключ сертификата должен быть не зашифрован (т.е. не должен требовать пароль при использовании).
  • Сертификат должен быть валидным (не просроченным и не поврежденным).

Рекомендуется:

  • Использовать сертификаты, подписанные доверенными центрами сертификации.
  • Использовать сертификаты с алгоритмом хэширования SHA-2, т.к. более ранние алгоритмы не обеспечивают должной безопасности соединения.

Настройка HTTPs в Apache Tomcat

Настройка https коннектора

Для настройки HTTPs в Apache Tomcat выполните следующие действия:

  1. Откройте файл server.xml в папке conf установленного Apache Tomcat.
  2. Найдите и скопируйте блок <Connector>, добавив опции:

    • SSLEnabled="true" scheme="https" secure="true" — включение SSL.
    • clientAuth="false" — отключение клиентской аутентификации.
    • sslProtocol="TLS" — выбор безопасного протокола (TLS).
    • SSLCertificateFile="/path/to/certificate.crt" — путь к файлу сертификата или цепочки сертификатов на сервере.
    • SSLCertificateKeyFile="/path/to/keyfile.key" — путь к файлу закрытого ключа. Ключ не должен требовать пароля.
  3. Измените значение опции port на значение, отличное от номера порта HTTP коннектора.
  4. Удалите опцию redirectPort.
  5. После внесения изменений, блок будет выглядеть примерно так:

    <Connector port="8843" 
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       connectionTimeout="20000"
       SSLEnabled="true" scheme="https" secure="true"
       clientAuth="false" sslProtocol="TLS"
       SSLCertificateFile="/path/to/certificate.crt"
       SSLCertificateKeyFile="/path/to/keyfile.key"
       URIEncoding="UTF-8"
       relaxedPathChars=""}{][|"
       relaxedQueryChars=""}{][|"
       maxHttpHeaderSize="32768" />

Перенаправление с HTTP на HTTPS

Для настройки автоматического перенаправления http на https выполните следующие действия:

  1. Откройте файл web.xml в папке conf установленного Apache Tomcat.
  2. В блок <web-app> добавьте следующие строки:

    <security-constraint>
       <web-resource-collection>
          <web-resource-name>securedapp</web-resource-name>
          <url-pattern>/*</url-pattern>
       </web-resource-collection>
       <user-data-constraint>
          <transport-guarantee>CONFIDENIAL</transport-guarantee>
       </user-data-constraint>
    </security-constraint>

Для работы перенаправления должен быть настроен как https-коннектор, так и http-коннектор, с которого будет осуществляться перенаправление.

Настройка HTTPs в nginx, IIS

Настройка HTTPs в обратных прокси (proxy) описана в соответствующих разделах: