如何在Flask API中配置含uca.cer的CA SSL证书
在Flask中配置包含中间证书(uca.cer)的SSL证书
Flask的ssl_context参数直接传三元组是不支持的,你可以通过以下两种方法解决:
方法一:合并证书链文件
将你的server.cer(服务器证书)和uca.cer(中间证书)合并成一个完整的证书链文件,顺序很重要:
- 打开
server.cer,复制所有内容 - 打开
uca.cer,将内容追加到server.cer内容的后面,保存为新文件比如full_chain.cer - 修改Flask启动代码,使用合并后的证书链:
from flask import Flask, abort, request, jsonify app = Flask(__name__) ... if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, ssl_context=('full_chain.cer', 'server.key'))
方法二:手动创建SSLContext对象
利用Python标准库的ssl模块创建SSLContext对象,直接加载三个文件:
from flask import Flask, abort, request, jsonify import ssl app = Flask(__name__) ... if __name__ == '__main__': # 创建TLS服务器上下文 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # 加载证书、密钥和中间证书 context.load_cert_chain(certfile='server.cer', keyfile='server.key', cafile='uca.cer') app.run(host='0.0.0.0', port=5000, ssl_context=context)
说明
Flask的ssl_context参数如果传入元组,仅支持(证书文件路径, 密钥文件路径)的格式,第三个参数不会被解析,所以直接传三元组会运行失败。使用上述两种方法,就能让浏览器正确识别完整的证书链,解决安全提示问题。
内容的提问来源于stack exchange,提问作者Paradise EICTP
相关产品推荐
相关产品推荐

