在工作中总有会遇到不得不使用https服务的时候,如我在工作中就遇到了苹果ipa安装包请求地址必须使用https协议不然会提示证书错误.
接下来就简单描述下flask怎么启动https服务
安装pyOpenSLL
pip install pyOpenSSL
在Terminal内生成服务端的证书
# 生成私钥,按照提示填写内容
openssl genrsa -des3 -out server.key 1024
# 生成csr文件 ,按照提示填写内容
openssl req -new -key server.key -out server.csr
# Remove Passphrase from key
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
# 生成crt文件,有效期1年(365天)
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
在flask中使用
from flask import Flask
app = Flask(__name__)
app.run(ssl_context=('your_path/server.crt', 'your_path/server.key'))
启动站点服务后你会发现站点的协议都为https协议.
但是浏览器访问时会提示证书不安全,通过网上搜集资料目前我知道有两种方法可以解决证书不安全问题:
1.客户端安装对应的客户端证书
2.使用第三方授权机构颁发的证书如阿里云
使用第三方授权机构的方法我在这就不描述了,网上看到了一篇很全的生成个人证书的方法
https://blog.csdn.net/yannanxiu/article/details/70670225 大家可以进行参考,亲测可用.
使用感受,创建密钥的方式都是一样的,创建证书请求的方法都是一样的,导出成浏览器支持的.p12格式的方法都是一样的,唯一三个的区别在自签署证书,server及client的证书区别在Common Name填写,server需要填写服务器ip.
#生成CA证书
openssl x509 -req -in -out -signkey -days 3650
#生成server及client证书
openssl x509 -req -in -out -signkey -CA -CAkey -CAcreateserial -days 3650
我把内容也复制过来,万一链接失效方便查阅
windows 下OpenSSL下载地址:
http://slproweb.com/products/Win32OpenSSL.html
我根据我电脑版本选择了
之后就是根据指令生成证书了
生成CA证书
创建私钥
openssl genrsa -out ca/ca-key.pem 1024
好多同学对这些参数有疑问以下是简单说明
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [numbits]
选项说明:
-out filename :将生成的私钥保存至filename文件,若未指定输出文件,则为标准输出。
-numbits :指定要生成的私钥的长度,默认为1024。该项必须为命令行的最后一项参数。
-des|-des3|-idea:指定加密私钥文件用的算法,这样每次使用私钥文件都将输入密码,太麻烦所以很少使用。
-passout args :加密私钥文件时,传递密码的格式,如果要加密私钥文件时单未指定该项,则提示输入密码。传递密码的args的格式见[openssl密码格式]
创建证书请求,需要填的参数意义不大可根据喜好填写
openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:
自签署证书
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
将证书导出成浏览器支持的.p12格式
openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12
生成server证书
这一步生成的证书是要放在服务器上。
创建私钥
openssl genrsa -out server/server-key.pem 1024
> openssl req -new -out server/server-req.csr -key server/server-key.pem
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:192.168.1.246 # 注释:一定要写服务器所在的ip地址
Email Address []:
自签署证书
openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
将证书导出成浏览器支持的.p12格式
openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
生成client证书
创建密钥
openssl genrsa -out client/client-key.pem 1024
创建证书请求
> openssl req -new -out client/client-req.csr -key client/client-key.pem
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
自签署证书
openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
将证书导出成浏览器支持的.p12格式
openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
2人点赞
Python_TOOL
作者:vvccool
链接:https://www.jianshu.com/p/3d743fca1fd6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 标签:https,pem,Flask,ca,server,访问,client,key,out From: https://www.cnblogs.com/ai594ai/p/16873165.html