在 python/flask 中使用 .der 证书

using .der certificate in python/flask

我有一个 python flask 应用程序,我在其中使用 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'。我如何在代码中使用它而不是上面的代码?

你提到的两个文件是同一个东西(链证书)只是格式不同。

最好配置一个反向代理(如 nginx)来处理 SSL 内容,而不是将其包含在您的 flask 应用程序中。

Python 仅本地处理 PEM 格式文件。

但是,如果必须 - 您需要两个文件 - 证书文件和密钥文件。

如果您从第三方 CA 获得证书,那么他们会为您提供证书文件。

密钥文件始终在您身边,应保密。

由于您有一个证书链,您必须为应用程序提供自定义上下文并将所有文件包含在您的链中,因为 load_cert_chain method 只接受一个证书文件参数。

所以,简而言之,您需要做的是:

  1. 确保您的 PEM 文件包含您的服务器证书。
  2. 使用 PEM 文件和您的密钥文件创建自定义上下文。
  3. 将此自定义上下文传递给 Flask

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 文件包含您的服务器证书,下面是您如何为 flask 配置它:

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)