| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> HTTP通道安全学习笔记 -> 正文阅读 |
|
[网络协议]HTTP通道安全学习笔记 |
HTTP通道安全学习笔记
方案的演化以下演化过程为个人整理相关后的理解,过程中碰到了博客说不清的,查了很久资料才总结出来,但是仅供参考。 1 防止窃听为了防止数据被窃听(被看到内容),可以对请求参数和响应结果进行加密。 由于客户端(浏览器)上运行的代码,是很容易可以看到源码的,所以如果使用对称加密,实际上用于加解密的密钥(yue,不是yao)是可以被人获得的,知道了密钥,就可以任意对数据进行加解密,从而伪造请求和响应结果,所以安全性很低。 那么我们可以使用非对称加密。非对称加密算法需要两个密钥:
由于使用非对称加密,私钥只要保存在服务端并不被泄露出去,那么黑客就很难解密客户端请求参数,即使读到了响应结果,也没办法伪造响应结果,从而提高了系统安全性。 2 防止数据被篡改防止篡改的基本方式是通过“签名”来实现。即所有参数通过一种摘要算法(比如哈希)计算出一个摘要值,再用加密算法对摘要进行加密得到签名,只要黑客不知道加密的密钥,就不能伪造出这个签名,从而达到了防篡改的目的。 例如:
3 验证服务端下发的公钥由于请求是可以被劫持的,所以如果第三方劫持了客户端到服务端的通道,那么黑客就可以伪造公钥,从而劫持客户端所有请求。要解决这个问题,我们就要能够验证服务端的身份(形象的比喻就是把你的身份证给我看看)。 在HTTP通信中,我们使用证书机制来验证服务端的身份。 证书就可以看做是服务器的身份证,那么身份证的颁发机构就是CA机构(看作是公安局),CA机构的证书是收费的,当然也可以做一个自签的证书,比作商户的会员卡性质,只要客户端认你的会员卡就行。 有了证书后,我们的请求流程就成了这样: CA证书机制是如何保证服务端身份确认的准确性?
4 加解密方案的优化达成一个共识:使用对称加密的效率要远高于非对称加密。 此时,我们验证了服务端的身份了,那么本次连接就已经是安全的了,我们此时的目的就是单纯的不让人看到明文内容就好了(我们已经面对面了,解决了被篡改和冒充的风险,现在只需要不让其他人听懂我们之间的谈话就行了),所以如果还用非对称加密(基于公私钥)那么效率就会比较低,我们可以选择用对称加密来提高局部的效率。 5 SSL的基本原理SSL就是基于上述我自己推导的过程产生的,当前其中还有很多内容并没有提及,但是我认为初步掌握SSL所需的要点,在上文中都已经提及了,下面简单总结一下SSL的原理。
SpringBoot内置HTTPS配置本方法适用于小型的SpringBoot单体项目,可以直接将SSL证书配置到SpringBoot内置的Tomcat上,从而开启SSL通信。但是不适用于带有负载均衡器或微服务集群乃至分布式的大型应用场景。 使用keystore工具,它是jdk自带的一项工具,在
1 生成密钥对
执行生成命令
查看密钥对内容
2 导出证书
执行导出证书命令
导出的这个证书在客户端(PC)上安装到“受信任的根证书颁发机构”下,关闭浏览器重新打开访问系统即可。 3 配置SpringBoot以下为application.yml的相关配置
将 clean maven依赖后,可以运行测试,此时可以访问https://localhost,但https这部分还是处于红色警告标识(无法验证该证书的有效性),需要把alias.cer文件安装在客户端(PC)本地的“受信任的根证书颁发机构”下。安装后清除缓存重启浏览器,重新范围系统即可。 需要了解的是,cer证书我们需要通过前端触发,让用户进行下载安装,以此来信任站点,IE有ActiveX可以做,其他浏览器的话,目前还是通过js+用户手动安装实现(不然就花钱买CA机构的证书吧,一劳永逸)。 如果要允许用户使用http访问,那么我们需要配置http转https,这里不作详细记录。 基于Nginx的HTTPS配置1 安装Openssl通过该网站,下载可在Windows下运行安装的安装包 http://slproweb.com/products/Win32OpenSSL.html 安装后即可开始创建证书
2 创建证书
3 配置NginxNginx 的配置文件nginx.conf中,默认是带有ssl配置模板的,我们只要稍微改改就可以用了,具体Nginx需要如何配置,这里不作详细说明。
接口防篡改主要用于开放API的时候(服务端对服务端,或者客户端对服务端),通常会对请求参数进行加密和签名。 签名过程通常可以有这样几个步骤:
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:57:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |