win10+python+Flask设置SSL证书,使用https服务

本人也是看了很多博客,才学会的。

Flask使用SSL搭建HTTPS服务

  1. 直接使用ssl:
from flask import *

app = Flask(__name__)

@app.route('/')
def index():
    return '

hello

'
if __name__ == '__main__': app.run(port=7000, ssl_context='adhoc')

这样,就可以开启一个https服务:
控制台输出如下:

* Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 620-590-151
 * Running on https://127.0.0.1:7000/ (Press CTRL+C to quit)

这样,就可以通过https://127.0.0.1:7000/访问flask程序了(注意,由于证书不是由受信任的第三方机构CA签发的证书,而是自己的,浏览器会提示有风险,直接选择“继续访问”就可以了)~
但是,这还不够,我们还是希望能够使用自己指定的证书或者自己签发一个证书给自己使用。(如果有报错,需要安装pycrypto库、paramiko库以及按提示安装visual c++ build tools 14.0以上版本,vc要装比较久,但是装好就可以了)
2. 使用一个自己指定的证书运行https服务:

from flask import *

app = Flask(__name__)

@app.route('/')
def index():
    return '

hello

'
if __name__ == '__main__': app.run(port=7000, ssl_context=('key/server.crt', 'key/server.key'), debug=True)

只需要将ssl_context参数改成一个元组,第零位是crt文件路径,第一位是key文件路径即可开启https服务~
但这样运行https服务,浏览器同样会提示有风险。
3. 如何生成一个自签证书呢?很简单,只需要安装一个openssl。如何安装openssl呢?先去下载::http://slproweb.com/products/Win32OpenSSL.html 下载windows的release版本,exe、msi都可以。下载后安装。安装好后,将安装目录的bin文件夹添加到环境变量(例如我拍的是C:\Program Files\OpenSSL-Win64\bin)然后就可以在命令行通过输入openssl调用openssl了,接下来,在你想要创建证书的位置输入以下几行命令(本人从其他博主那里学来的,在这里表示感谢):

# 生成私钥
openssl genrsa -des3 -out server.key 1024
# 生成csr文件
openssl req -new -key server.key -out server.csr
cp server.key server.key.org 
openssl rsa -in server.key.org -out server.key
# 生成crt文件,有效期365天
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

就生成了四个文件:server.crt server.csr server.key server.key.org 这样,签名就生成好了。
在生成过程中,需要填写一些基本信息,如地址、组织、负责人、邮箱等等信息,以及设置密码,按要求填写即可。

现在,回到刚刚的flask代码,在app.run那一行,将ssl_context参数元组改成刚刚生成好的crt、key文件的对应路径,运行代码,即可使用刚刚生成好的证书作为https的证书啦~但需要注意,此时浏览器仍会提示有风险,因为这个证书是我们自己签名的,而不是第三方颁发的CA证书。
4. 那么,如何获得CA证书呢?那就需要向你所使用的云服务商申请了 一般都会收费,还需要备案啥的,网上的方法很多,本人就不讲了~ 使用第三方认证的CA证书替换自己生成的证书后,在浏览器打开你的域名时,就会看到url旁边的小绿标,很舒服~
5. 第三方认证的CA证书与自签证书的区别在哪里?首先,这两者都是可以进行加密https通信的,安全性是一样的。但是,自己签的证书没有第三方的验证,所以是不受信的,在浏览器浏览时会提示风险。第三方验证的证书可以在云服务提供商申请,但是需要钱,以及会过期,管理起来比较繁琐。而自己的证书是自己签的,比较自由,也可以设置更长的过期时间。

你可能感兴趣的:(计算机科学,Linux及服务器,python基础笔记,https,python,ssl,网络编程,flask)