Python 3.x 在python/flask中使用.der证书

Python 3.x 在python/flask中使用.der证书,python-3.x,ssl,flask,ssl-certificate,Python 3.x,Ssl,Flask,Ssl Certificate,我有一个python flask应用程序,我使用ssl创建了一个证书和密钥文件,并将其放入代码中,如下所示 if __name__=='__main__': context=('cert.crt','keys.key') app.run('0.0.0.0',ssl_context=context,debug=True) 然而,它们是无效的。在我部署代码的服务器中,有两个文件'sslca-chain.der'和'sslca-chain.pem'。我如何在代码中使用它而不是上面的

我有一个python flask应用程序,我使用ssl创建了一个证书和密钥文件,并将其放入代码中,如下所示

if __name__=='__main__':
    context=('cert.crt','keys.key')
    app.run('0.0.0.0',ssl_context=context,debug=True) 

然而,它们是无效的。在我部署代码的服务器中,有两个文件
'sslca-chain.der'
'sslca-chain.pem'
。我如何在代码中使用它而不是上面的

您提到的两个文件是相同的(链证书),只是格式不同

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

Python只处理本机的
PEM
格式文件

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

如果您从第三方CA获得证书,则他们将向您提供证书文件

密钥文件始终与您在一起,应该保密

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

总之,你要做的是:

  • 确保PEM文件包含服务器证书
  • 使用PEM文件和密钥文件创建自定义上下文
  • 将此自定义上下文传递给Flask
  • PEM文件只是一个文本文件,它按特定顺序包含所有证书;命令如下:

    -----BEGIN CERTIFICATE----- 
    (Your Primary SSL certificate) 
    -----END CERTIFICATE----- 
    -----BEGIN CERTIFICATE----- 
    (Your Intermediate certificate) 
    -----END CERTIFICATE----- 
    -----BEGIN CERTIFICATE----- 
    (Your Root 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) 
    

    奇怪的是,我有pem文件,在sperate下有两个条目----开始证书----和----结束证书------。不确定密钥文件在哪里。有办法找到答案吗??使用Windows server 2008 64位,您将有多个
    --开始证书--
    --结束证书--
    行对;每个中间证书一个,一直到根证书(最后一对)。如果您不知道密钥文件在哪里,请询问为您获得证书的人;因为它是在请求时生成的。