今天完成SpringMVC框架的学习,做了一个SSM整合的案例。明天学SpringBoot or Redis。
【刷题】
剑指 Offer 32 从上到下打印二叉树
剑指 Offer 33 二叉搜索树的后序遍历序列
剑指 Offer 34 二叉树中和为某一值的路径
剑指 Offer 35 复杂链表的复制
剑指 Offer 36 二叉搜索树与双向链表
【SpringMVC】
- SpringMVC的工作原理
- SpringMVC常用注解
- 拦截器和过滤器的区别
【HTTP】
- HTTP请求方法(9个)
- GET和POST区别(作用、参数、安全、幂等、缓存)
- HTTP常见响应状态码(100/200/301/302/400/403/404/500/503)
- 转发和重定向的区别
- 首部字段(Connection/Cache-Control(max-age)/Expires/ETag/Set-Cookie)
- Cookie和Session相关
- 集群下的session管理
- XSS和CSRF
- HTTP⻓连接,短连接
- HTTP1.0、1.1、2.0之间的区别
【HTTPS】
- http和https区别
- https连接过程
- 数字证书认证(CA)
- 公开密钥加密RSA算法(极大整数做因数分解)
- 报文完整性(MD5报文摘要)
HTTPS:在交换密钥阶段使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
如何证明公开密钥是货真价实的服务器公开密钥。可以使用CA颁发的公开密钥证书。
接收到证书的客户端可以使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可以明确两件事:
一、认证服务器的公开密钥的是真实有效的数字证书认证机构。
二、服务器的公开密钥是值得信赖的。
此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。
服务器把自己的公开密钥登录至数字证书认证机构。
数字证书认证机构用自己的私有密钥向服务器的公开密码署数字签名并颁发公钥证书。
客户端拿到服务器的公钥证书后,使用数字签名认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性。
使用服务器的公开密钥对报文加密后发送。
服务器用私有密钥对报文解密。
【HTTPS的安全通信机制】
工作流程,基本分为三个阶段:
认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。
协商会话密钥。客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
加密通讯。此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。