在python / flask中使用.der证书

时间:2017-01-02 07:47:44

标签: python-3.x ssl flask ssl-certificate

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

1 个答案:

答案 0 :(得分:1)

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

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

Python本身只处理PEM格式文件。

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

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

密钥文件总是随身携带,应该保密。

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

因此,简而言之,您需要做的是:

  1. 确保您的PEM文件包含您的服务器证书。
  2. 使用PEM文件和密钥文件创建自定义上下文。
  3. 将此自定义上下文传递给Flask
  4. 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)