Статьи

Apache Payara: давайте шифровать

Некоторое время назад я написал небольшое руководство о том, как вы можете создавать SSL-сертификаты Let’s Encrypt и устанавливать их на свою платформу Glassfish Java EE. Этот трюк творил чудеса для меня, но необходимость вручную обновлять и переустанавливать сертификаты каждые три месяца становилась довольно раздражающей.

Я провел небольшое исследование, и, как и в первом уроке, в основном это краткое изложение моих выводов. Прежде всего, я должен упомянуть г-на Дашнера, который объяснил мне, как HTTPS обычно обрабатывается в мире Java EE — большое спасибо!

Apache Payara

Короче говоря: Payara, Glassfish, JBoss и другие имеют некоторые различия в том, как они обрабатывают HTTPS, поэтому, как сказал г-н Дачнер, разумный способ сделать это — позволить им работать через HTTP за кулисами и позволить HTTP-серверу Apache фактически общаются с пользователями, выступая в качестве обратного прокси-сервера, перенаправляя все запросы в / из скрытой платформы Java EE.

Перво-наперво, скачайте Payara или другой сервер по вашему выбору, установите и запустите его с конфигурацией по умолчанию. По умолчанию он должен прослушивать порт 8080 . Не нужно ничего делать дальше.

Затем установите Apache, как описано здесь, и в файле /etc/apache2/sites-available/example.com.conf укажите следующее (файл example.com.conf как в связанной статье):

1
2
3
4
5
6
7
8
<VirtualHost *:80>
    ...
    ProxyPass / https://0.0.0.0:8080/
    ProxyPassReverse / https://0.0.0.0:8080/
 
    ProxyPass /myapp http://0.0.0.0:8080/myapp
    ProxyPassReverse /myapp http://0.0.0.0:8080/myapp
</VirtualHost>

После сохранения изменений не забудьте перезагрузить Apache , поэтому он читает новую конфигурацию:

sudo systemctl reload apache2

Теперь попросите ваш брандмауэр выставить порт 80 для входящих подключений (это, вероятно, уже настроено), и вы наполовину готовы. Пока у вас есть работающий сервер Apache, который перенаправляет все запросы, сделанные на www.example.com и www.example.com/myapp во внутренний Payara.

Чтобы включить SSL через Let’s Encrypt, просто следуйте certbot описанным здесь, и не забудьте нажать 2 когда из certbot появится следующее сообщение:

1
2
3
4
5
6
7
8
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Нажатие 2 даст команду certbot автоматически настроить Apache, чтобы он перенаправлял весь HTTP-трафик на HTTPS. Это очень удобно, поскольку ссылки http:// по-прежнему широко распространены, поэтому имеет смысл лишь перенаправить пользователя на безопасную альтернативу.

Вот и все, теперь все должно работать через HTTPS, и вы всегда должны видеть зеленую блокировку в своем браузере при доступе к приложениям Java EE через www.example.com . Единственное, что мне не нравится, это то, что, по-видимому, мы должны указывать каждый контекстный корень (т.е. /myapp ) в конфигурационном файле Apache. Это кажется очень неудобным, поэтому я спросил StackOverflow, как мы можем избежать этого — если вы знаете, пожалуйста, отправьте ответ!

Опубликовано на Java Code Geeks с разрешения MIhai Andronache, партнера нашей программы JCG. Смотреть оригинальную статью здесь: Apache. Скумбриевидный гидролик. Давайте зашифруем.

Мнения, высказанные участниками Java Code Geeks, являются их собственными.