Если ваши серверы генерируют свои собственные самозаверяющие сертификаты как часть команд контейнера развертывания, то каждый сервер будет получать обновленный сертификат при каждом развертывании и при запуске нового сервера.
Лучшая команда, которую я нашел для этого - следующая: она создает сертификаты, действительные в течение 10 лет:
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/pki/tls/certs/server.key -out /etc/pki/tls/certs/server.crt -days 3650 -nodes -subj "/CN=example.com"
Используя этот подход, при условии, что вы развертываете (включая обновление версии вашего контейнера EB), по крайней мере, раз в десять лет ваши серверы будут работать.
Это также значительно упрощает настройку. Теперь все, что вам нужно сделать, это:
- Добавить файл конфигурации в ваш проект beasstalk elasti c, который генерирует самозаверяющие сертификаты и добавляет настройки HTTPS на веб-сервер.
- Пусть группа безопасности веб-сервера принимает подключения порта 443 от группы безопасности балансировщика нагрузки.
- Настройте балансировщик нагрузки для переадресации трафика c с порта 443 на порт 443.
Ниже приведен пример полного конфигурационного файла HTTPS elasti c beanstalk для python. Это небольшое изменение предложенного AWS файла конфигурации для python. Я добавил команду генерировать сертификат в начало контейнерных команд и удалил два оператора файла для /etc/pki/tls/certs/server.crt
и /etc/pki/tls/certs/server.key
, так как они теперь генерируются автоматически. AWS примеры для других языков можно найти здесь .
Python файл конфигурации:
packages:
yum:
mod24_ssl : []
files:
/etc/httpd/conf.d/ssl.conf:
mode: "000644"
owner: root
group: root
content: |
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On
Listen 443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/python/current/app/application.py
<Directory /opt/python/current/app>
Require all granted
</Directory>
WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app \
python-home=/opt/python/run/venv \
home=/opt/python/current/app \
user=wsgi \
group=wsgi
WSGIProcessGroup wsgi-ssl
</VirtualHost>
container_commands:
01createcerts:
command: |
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/pki/tls/certs/server.key -out /etc/pki/tls/certs/server.crt -days 3650 -nodes -subj "/CN=example.com"
02killhttpd:
command: "killall httpd"
0waitforhttpddeath:
command: "sleep 3"