欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

本地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.crtlocalhost.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,报错我们也没办法。
本地https访问

我在网上找到些让chrome浏览器不管ssl的安全性的方法:

1种: 启动参数 加上
	--disable-web-security

2种: 服务器配置中,配置
	chrome://flags/#allow-insecure-localhost
	 Allow invalid certificates for resources loaded from localhost.
	设置为 true
	重启浏览器即可。

效果如下:
本地https访问

恩恩,大概就是这么多,感觉现在写博客就像是在吐槽。
也不是吐槽,感觉和这些脱节了,这些东西国内不成体系,搞这些真的累,这么点东西,折腾了我一周。


参考:
https://*.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate

相关标签: 计算机网络