本地https访问
程序员文章站
2022-05-01 10:09:31
...
https是服务安全的进一步发展,虽然不能完全保证数据的安全,但明显比明文传输的http要好了很多。
https协议中,
- 客户端向服务器请求服务器的公匙
- 用公匙加密一段客户端产生的密码传输给服务器
- 服务器用私匙解密获取到的密码
- 服务器端和客户端用 客户端用产生的密码 加密数据 进行交互
这里只是简单介绍一下,不细致展开来。
知道了大致的方向,我们就讲解下为啥我要特殊说明本地的https。
上面的传输过程虽然大致满足了通信安全,但是服务安全并不能保障,因为服务器可能是冒充的。这个难题并不好用技术来解决。
于是那些人就规定权威机构认证的方式来保障服务器权威性。https中使用到的ssl必须要权威机构颁发,并且绑定域名。
在客户端对这个https进行判别是不是权威机构颁发的来判断是否安全。
这个感觉并不靠谱,但是那些人就是这么搞的,权威机构可以在这里收刮一大笔的安全保障金(感觉恶心)。
那我们本地想做做小实验,看看https协议咋办,当然作为穷酸的我,不可能想去搞 付款之说。
使用下面命令生成一个 ssl。
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
-extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
这个命令生成了 localhost.crt 和 localhost.key 两个文件,我这里用的 flask 做服务器,代码大概这样写:
from flask import Flask, render_template, request, Response, jsonify
import redis
import json
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=18080, debug=True,
ssl_context=('localhost.crt', 'localhost.key'))
chrome 浏览器来访问 https://127.0.0.1:18080 来访问这服务,会发现ssl认证相关的错误,毕竟不是权威的ssl,报错我们也没办法。
我在网上找到些让chrome浏览器不管ssl的安全性的方法:
第1种: 启动参数 加上
--disable-web-security
第2种: 服务器配置中,配置
chrome://flags/#allow-insecure-localhost
将 Allow invalid certificates for resources loaded from localhost.
设置为 true
重启浏览器即可。
效果如下:
恩恩,大概就是这么多,感觉现在写博客就像是在吐槽。
也不是吐槽,感觉和这些脱节了,这些东西国内不成体系,搞这些真的累,这么点东西,折腾了我一周。
参考:
https://*.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate