У меня есть несколько сред с одним экземпляром в 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.






На платформах 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