gpt4 book ai didi

ssl - 使用 SSL 的 Elastic Beanstalk 上的 Flask 给出 403 Forbidden

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:39 25 4
gpt4 key购买 nike

这是应用程序的目录结构。

  • 应用程序/__init_.py
  • 应用/静态/
  • 应用/模型/
  • 应用程序/ View /
  • 应用程序.py
  • 需求.txt
  • .elasticbeanstalk/配置
  • .elasticbeanstalk/optionsettings.application_name
  • .ebextensions/python.config
  • .ebextensions/https.config

这是 .elasticbeanstalk 中的文件片段

#config
EnvironmentTier=WebServer::Standard::1.0
EnvironmentType=SingleInstance
Region=us-west-1
ServiceEndpoint=https://elasticbeanstalk.us-west-1.amazonaws.com
SolutionStack=64bit Amazon Linux 2014.03 v1.0.3 running Python

#optionsettings.application_name
[aws:elasticbeanstalk:container:python]
NumProcesses=1
NumThreads=15
StaticFiles=/static/=app/static/
WSGIPath=application.py

[aws:elasticbeanstalk:container:python:staticfiles]
/static/=app/static/

这是我从 CheapSSL 创建 SSL 证书的步骤

  • openssl genrsa 2048 > privatekey.pem
  • openssl req -new -key privatekey.pem -out csr.pem
  • 向 Comodo 提出 SSL 证书请求并收到三个文件
    • 根 CA 证书 - AddTrustExternalCARoot.crt
    • 中级 CA 证书 - PositiveSSLCA2.crt
    • 您的 PositiveSSL 证书 - server.crt

注意:我指定的服务器是Apache/OpenSSL

最后,这里是 .ebextensions 中的文件片段

#https.config
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupName: {Ref : AWSEBSecurityGroup}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0

packages:
yum:
mod24_ssl : []

files:
/etc/httpd/conf.d/ssl.conf:
mode: 000777
owner: ec2-user
group: ec2-user
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"

Alias /static /opt/python/current/app/
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>

WSGIScriptAlias / /opt/python/current/app/python/application.py

<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>

WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app:/opt/python/run/venv/lib/python2.6/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>

/etc/pki/tls/certs/server.crt:
mode: 000777
owner: ec2-user
group: ec2-user
content: |
-----BEGIN CERTIFICATE-----
#contents from server.crt
-----END CERTIFICATE-----


/etc/pki/tls/certs/server.key:
mode: 000777
owner: ec2-user
group: ec2-user
content: |
-----BEGIN RSA PRIVATE KEY-----
#contents from privatekey.pem
-----END RSA PRIVATE KEY-----

此配置是 AWS Elastic Beanstalk 文档中的一个片段,稍有改动。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/SSLPython.SingleInstance.html

  • mod_ssl -> mod24_ssl 由于 yum 安装错误。我很幸运从 Github 上找到了这个修复程序
  • 01killhttpd 已排除。在多次部署应用程序后,关闭 httpd 会对应用程序造成永久性损坏。

症状如下。

  • 可以访问http:
  • 给出 403 Forbidden 您无权访问此服务器上的/。对于 https:

如有必要,我会公开网址。

我已执行 AWS 文档中指定的每个步骤,但仍未能实现一个目标;使用 https Hook 我的网站。网上没有足够的帖子可以帮助我解决这个问题。我远离 Load Balancer,因为我使用 GoDaddy 购买了域,并且为 lb 设置域太复杂了(那是另一回事)。

这里是 Elastic Beanstalk 日志快照的链接。

https://dl.dropboxusercontent.com/u/23288606/Log.txt

提前致谢。

更新:

有人阅读了日志并指出了一条错误消息。

[ssl:warn] [pid 1989] AH01909: [ec2-address].compute.amazonaws.com:443:0 server certificate does NOT include an ID which matches the server name

是的,SSL 证书指的是我的自定义域,而服务器仍将其视为 ec2 的默认公共(public) DNS(我认为)。

仅供引用,自定义域是从 Godaddy 购买的。我这样做是为了让 A Record 指向我的 ec2 ip 地址。

简而言之,当我的 ec2 服务器设置 ssl 时,我该如何做到这一点,它知道它的 fqdn 是我的自定义域,而不是 ec2 提供的域?

最佳答案

警告:我是开发人员,不是系统管理员,我不知道自己在做什么

这周我遇到了完全相同的问题。包括域一。这是一个对我有用的配置。欢迎提供反馈,因为我刚刚破解了这个工具。

Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupName: {Ref : AWSEBSecurityGroup}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0

packages:
yum:
mod24_ssl : []

files:
/etc/httpd/conf.d/ssl.conf:
mode: "000755"
owner: root
group: root
content: |
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
<Proxy *>
Require all granted
</Proxy>
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateChainFile "/etc/pki/tls/certs/inter.crt"
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"

Alias /static /opt/python/current/app/printwithme/static
<Directory /opt/python/current/app/>
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:/opt/python/run/venv/lib/python2.6/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi-ssl
</VirtualHost>

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

-----END CERTIFICATE-----

/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----

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

-----END CERTIFICATE-----

container_commands:
01killhttpd:
command: "killall httpd"
02waitforhttpddeath:
command: "sleep 3"

首先添加我认为禁止的问题与文件权限有关。我认为这就是为什么 OP 将他的权限设置为 777 .在我的例子中,它与 Apache 版本有关。亚马逊在他们的示例中使用 Apache 2.2,但在服务器中使用 2.4。通过运行 httpd -v 确认.如果这是真的,请参阅 this link .这给了我在 <Proxy *> 中的更改和 <Directory /opt/python/current/app/> .我不知道 Order deny,allow 之间的区别和 Order allow,deny ,我现在知道这称为访问控制。如果我改错了,请告诉我。然后我收到了404错误。

更改后我必须更改:

WSGIScriptAlias / /opt/python/current/app/python/application.py

WSGIScriptAlias / /opt/python/current/app/application.py

这应该指向您创建应用程序对象的文件。您的可能有所不同。

然后不得不改变:

Alias /static /opt/python/current/app/

Alias /static /opt/python/current/app/my-app-name/static

因为在我的应用程序中,静态文件位于嵌套文件夹中。这应该指向你的目录。公告my-app-name是一个变量,您可以根据需要更改它。

最后我添加了一个 chain文件。这是 SSL 人员连同我的证书一起给我的。您可能还需要添加它。在我看来,它可能是可选的,但实际上不是。

抱歉,如果我遗漏了什么。

更新

我对文件模式有疑问。我不得不引用他们的话: 模式:“000755” 模式:“000400”

我将更新配置以反射(reflect)这些更改。

关于ssl - 使用 SSL 的 Elastic Beanstalk 上的 Flask 给出 403 Forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com