我有一个python烧瓶应用程序,我使用ssl创建了一个证书和密钥文件,并将其放在代码中,如下所示
if __name__=='__main__':
context=('cert.crt','keys.key')
app.run('0.0.0.0',ssl_context=context,debug=True)
但是它们无效。在我已部署代码的服务器中,有2个文件'sslca-chain.der'
和'SSLCA-Chain.pem'
。我如何在代码中使用它而不是上面的?
答案 0 :(得分:1)
你提到的两个文件是不同格式的相同的东西(链证书)。
最好配置一个反向代理(如nginx)来处理SSL内容,而不是将其包含在您的烧瓶应用程序中。
Python本身只处理PEM
格式文件。
但是,如果必须 - 您需要两个文件 - 证书文件和密钥文件。
如果您从第三方CA获得了证书,那么他们将为您提供证书文件。
密钥文件总是随身携带,应该保密。
由于您拥有证书链,因此必须为应用程序提供自定义上下文并包含链中的所有文件,因为load_cert_chain
method只为证书文件提供一个参数。
因此,简而言之,您需要做的是:
PEM文件只是一个文本文件,其中包含特定顺序的所有证书;顺序是:
-----BEGIN CERTIFICATE-----
(Your Primary SSL certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Intermediate certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Root certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
行很重要,应该包括在内
一旦您确认您的PEM文件包含您的服务器证书,以下是如何为烧瓶配置它:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) # use TLS to avoid POODLE
ctx.load_cert_chain('/path/to/sslca-chain.pem', '/path/to/server.key')
app.run('0.0.0.0',ssl_context=ctx,debug=True)