SSL на одном экземпляре Elastic Beanstalk, Amazon Linux 2023, Apache, PHP8

У меня есть несколько сред с одним экземпляром в AWS Elastic Beanstalk. Все они имеют сертификаты SSL, установленные через расширения eb, а не через балансировщик нагрузки.

Все они используют PHP и использовали PHP 7 на Amazon Linux 1.

Настраиваются они более-менее по руководству от AWS: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-php.html

Я пытаюсь перейти на экземпляры под управлением Amazon Linux 2023 и PHP 8.2.

Должен отметить, что я использую Apache, а не ngix.

На данный момент я изменил mod24_ssl : [] на mod_ssl : [] и смог загрузить среду. Обычный HTTP работает нормально, HTTPS получает сообщения «невозможно подключиться к серверу» и «соединение отказано» в зависимости от клиента.

Мои файлы eextensions выглядят следующим образом:

packages:
  yum:
    mod_ssl : []

files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule ssl_module modules/mod_ssl.so
      Listen 443
      <VirtualHost *:443>
        <Proxy *>
          Order deny,allow
          Allow from all
        </Proxy>

        SSLEngine             on
        SSLCertificateFile    "/etc/pki/tls/certs/server.crt"
        SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
        SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol           All -SSLv2 -SSLv3
        SSLHonorCipherOrder   On
        SSLSessionTickets     Off

        Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff

        ProxyPass / http://localhost:80/ retry=0
        ProxyPassReverse / http://localhost:80/
        ProxyPreserveHost on
        RequestHeader set X-Forwarded-Proto "https" early

      </VirtualHost>

  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      ~~~~~~~
      -----END CERTIFICATE-----

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-east-2-xxx"]
          roleName:
            "Fn::GetOptionSetting":
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3.us-east-2.amazonaws.com/elasticbeanstalk-us-east-2-xxx/xxx.pem

Resources:
  sslSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

Я перевыпустил сертификаты и несколько раз переустанавливал среды. Я часами искал ответы в Интернете, но безуспешно. Я не вижу никаких руководств по настройке, ориентированных на Amazon Linux 2023.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отсюда: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.migration-al.generic.from-al1.html

На платформах AL2023/AL2 вы можете использовать файлы конфигурации, как и раньше, и все разделы работают так же. Однако некоторые настройки могут работать не так, как на предыдущих платформах Amazon Linux AMI. Например:

  • Некоторые пакеты программного обеспечения, которые вы устанавливаете с помощью файла конфигурации, могут быть недоступны в AL2023/AL2 или их имена могут быть изменены.
  • Некоторые параметры конфигурации, специфичные для платформы, были перемещены из пространств имен, специфичных для платформы, в другие, независимые от платформы пространства имен.
  • Файлы конфигурации прокси-сервера, находящиеся в каталоге .ebextensions/nginx, должны быть перемещены в каталог перехватчиков платформы .platform/nginx. Подробные сведения см. в разделе «Настройка обратного прокси-сервера» в разделе «Расширение платформ Elastic Beanstalk Linux».

Дальнейшее обсуждение здесь: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html

Решение:

Переместите содержимое файла ssl.conf, созданного в файле расширения eb, в .platform/httpd/conf.d/ssl.conf.

Итак, конфигурация теперь такая:

.ebextensions/https-instance.config

  yum:
    mod_ssl : []

files:
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      ~~~~~~
      -----END CERTIFICATE-----

.ebextensions/https-instance-single.config

Resources:
  sslSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

.ebextensions/privatekey.config

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-east-2-025310008910"]
          roleName:
            "Fn::GetOptionSetting":
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3.us-east-2.amazonaws.com/elasticbeanstalk-us-east-2-xxxxx/xxx.pem

.platform/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  SSLEngine             on
  SSLCertificateFile    "/etc/pki/tls/certs/server.crt"
  SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
  SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
  SSLProtocol           All -SSLv2 -SSLv3
  SSLHonorCipherOrder   On
  SSLSessionTickets     Off

  Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
  Header always set X-Frame-Options DENY
  Header always set X-Content-Type-Options nosniff

  ProxyPass / http://localhost:80/ retry=0
  ProxyPassReverse / http://localhost:80/
  ProxyPreserveHost on
  RequestHeader set X-Forwarded-Proto "https" early

</VirtualHost>

Как только все заработает, вам также следует пройти и немного усилить безопасность. Подробнее здесь: https://docs.aws.amazon.com/linux/al2023/ug/SSL-on-amazon-linux-2023.html

Другие вопросы по теме