Python Apache Web服务器错误表示SSL密钥文件不存在,即使存在一个

Python Apache Web服务器错误表示SSL密钥文件不存在,即使存在一个,python,docker,ubuntu,ssl,airflow,Python,Docker,Ubuntu,Ssl,Airflow,我对SSL、证书和密钥非常陌生,因此我感谢任何帮助,并认识到我可能犯了一个愚蠢的错误 我在三台CentOS 7服务器上运行Docker Swarm。Swarm在一定程度上部署了一个定制的Docker映像,用于运行ApacheAfflow 1.10.0(计划很快升级到1.10.1)。图像从基于Ubuntu的python:3.5-slim开始 我随后生成了自签名CA、证书和密钥。我认为这适用于我的用例,因为服务器位于内部网络上,只有团队成员在现场或使用VPN时才能访问Airflow Web服务器 d

我对SSL、证书和密钥非常陌生,因此我感谢任何帮助,并认识到我可能犯了一个愚蠢的错误

我在三台CentOS 7服务器上运行Docker Swarm。Swarm在一定程度上部署了一个定制的Docker映像,用于运行ApacheAfflow 1.10.0(计划很快升级到1.10.1)。图像从基于Ubuntu的python:3.5-slim开始

我随后生成了自签名CA、证书和密钥。我认为这适用于我的用例,因为服务器位于内部网络上,只有团队成员在现场或使用VPN时才能访问Airflow Web服务器

docker compose.yml
的一部分如下所示,以允许容器访问证书和密钥:

version: 3.5
    services:
        [...]
    webserver:
        [...]
        volumes:
            - type: bind
              source: /root/ca/intermediate/certs
              target: /usr/local/airflow/intermediate/certs
            - type: bind
              source: /root/ca/intermediate/private
              target: /usr/local/airflow/intermediate/private
我将文件的所有者从容器中更改为容器中的用户,以便应用程序可以读取它们

相关的
气流.cfg
如下:

[webserver]
base_url = http://localhost:443
web_server_host = 0.0.0.0
web_server_port = 443
web_server_ssl_cert = /usr/local/airflow/intermediate/certs/my_server.cert.pem
web_server_ssl_key = /usr/local/airflow/intermediate/private/my_server.key.pem
所有三台服务器上的
.cert.pem
.key.pem
文件都相同。我这样做是因为我怀疑Docker Swarm路由网格会期望服务器之间的一致性。(这是一个漏洞还是一个错误?)

Dockerfile还
公开
s端口
443

但是,每当Web服务器尝试启动时,我都会遇到以下错误:

 Traceback (most recent call last):
 [2018-11-29 19:43:10 +0000] [36] [INFO] Starting gunicorn 19.9.0
   File "/usr/local/bin/gunicorn", line 11, in <module>
     sys.exit(run())
 Traceback (most recent call last):
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 61, in run
     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
   File "/usr/local/bin/gunicorn", line 11, in <module>
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 223, in run
     sys.exit(run())
     super(Application, self).run()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 72, in run
     Arbiter(self).run()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 61, in run
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 199, in run
     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
     self.start()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 157, in start
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 223, in run
     self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds)
   File "/usr/local/lib/python3.5/site-packages/gunicorn/sock.py", line 162, in create_sockets
     super(Application, self).run()
     raise ValueError('keyfile "%s" does not exist' % conf.keyfile)
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 72, in run
     Arbiter(self).run()
 ValueError: keyfile "/usr/local/airflow/intermediate/private/my_server.key.pem" does not exist
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 199, in run
     self.start()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 157, in start
     self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds)
   File "/usr/local/lib/python3.5/site-packages/gunicorn/sock.py", line 162, in create_sockets
     raise ValueError('keyfile "%s" does not exist' % conf.keyfile)
 ValueError: keyfile "/usr/local/airflow/intermediate/private/my_server.key.pem" does not exist
回溯(最近一次呼叫最后一次):
[2018-11-29 19:43:10+0000][36][INFO]启动gunicorn 19.9.0
文件“/usr/local/bin/gunicorn”,第11行,在
sys.exit(run())
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.5/site packages/gunicorn/app/wsgiapp.py”,第61行,正在运行
WSGIApplication(“%(程序)s[选项][应用程序模块]”)。运行()
文件“/usr/local/bin/gunicorn”,第11行,在
文件“/usr/local/lib/python3.5/site packages/gunicorn/app/base.py”,第223行,正在运行
sys.exit(run())
super(应用程序,self).run()
文件“/usr/local/lib/python3.5/site packages/gunicorn/app/base.py”,第72行,运行中
仲裁者(self.run)()
文件“/usr/local/lib/python3.5/site packages/gunicorn/app/wsgiapp.py”,第61行,正在运行
文件“/usr/local/lib/python3.5/site packages/gunicorn/arbiter.py”,第199行,正在运行
WSGIApplication(“%(程序)s[选项][应用程序模块]”)。运行()
self.start()
文件“/usr/local/lib/python3.5/site packages/gunicorn/arbiter.py”,第157行,开头
文件“/usr/local/lib/python3.5/site packages/gunicorn/app/base.py”,第223行,正在运行
self.LISTENERS=sock.create_套接字(self.cfg、self.log、fds)
文件“/usr/local/lib/python3.5/site packages/gunicorn/sock.py”,第162行,位于create_sockets中
super(应用程序,self).run()
raise VALUERROR('密钥文件“%s”不存在“%conf.keyfile”)
文件“/usr/local/lib/python3.5/site packages/gunicorn/app/base.py”,第72行,运行中
仲裁者(self.run)()
ValueError:keyfile“/usr/local/aiffair/intermediate/private/my_server.key.pem”不存在
文件“/usr/local/lib/python3.5/site packages/gunicorn/arbiter.py”,第199行,正在运行
self.start()
文件“/usr/local/lib/python3.5/site packages/gunicorn/arbiter.py”,第157行,开头
self.LISTENERS=sock.create_套接字(self.cfg、self.log、fds)
文件“/usr/local/lib/python3.5/site packages/gunicorn/sock.py”,第162行,位于create_sockets中
raise VALUERROR('密钥文件“%s”不存在“%conf.keyfile”)
ValueError:keyfile“/usr/local/aiffair/intermediate/private/my_server.key.pem”不存在
所以我的问题是,如何以适当的方式识别SSL密钥和证书?关于这个问题的讨论相当简洁


我希望我已经提供了足够的背景——如果有帮助的话,我很乐意提供更多。再次感谢。

再次检查权限。通常一个密钥文件应该有一小部分权限(例如,不具有世界可读性),因此您的进程需要在适当的帐户下运行才能读取它。@PatrickMevzek是的,我认为这可能也是一个问题。但是my_server.cert.pem和my_server.key.pem都是r--r--r--。然后计算机真的认为该文件不存在。
cat/usr/local/aiffair/intermediate/private/my_server.key.pem
输出什么?@PatrickMevzek It
cat
s按预期输出RSA私钥。这解决了我的问题,我的错误与你的相同