前言
上次敌人对于 TCP/IP 面试的后续,次要是 https 的相干面试要点,请看下文
关注公众号,一起交换,微信搜一搜: 潜行前行
github 地址,感激 star
面试官:HTTPS 它的认证加密过程是怎么,它怎么保障内容不会被篡改
- 敌人:1,https 是基于 tcp 协定的,客户端先会和服务端发动链接建设
- 敌人:2,接着服务端会把它的证书返回给客户端,证书外面包含公钥 S.pub、颁发机构和有效期等信息
- 敌人:3,拿到的证书能够通过浏览器内置的根证书(内含 C.pub)验证其合法性
- 敌人:4,客户端生成随机的对称加密秘钥 Z,通过服务端的公钥 S.pub 加密发给服务端
- 敌人:5,客户端和服务端通过对称秘钥 Z 加密数据来进行 http 通信
面试官:那根证书怎么保障签发的证书是有平安无效的
- 敌人:1- 服务器会事后生成非对称加密密钥,私钥 S.pri 本人保留;而公钥 S.pub 则发给 CA 机构进行签名认证
- 敌人:2-CA 也会事后生成一非对称加密密钥,其私钥 C.pri 用来对服务器的公钥 S.pub 进行签名生成 CA 证书
- 敌人:3-CA 机构会把签名生成的 CA 证书返回给服务器,也就是方才服务端给客户端那个证书
-
敌人:4- 因为 CA(证书颁发机构)比拟权威,所以很多浏览器会内置蕴含它公钥 (C.pub) 的证书,称之为根证书。而后能够应用根证书来验证其颁发证书的合法性了
面试官:如果产生有限套娃的状况,根证书都被篡改怎么办?
- 敌人:无解,这须要 CA 根证书是准确无误,不手动强制批改本地根证书就没事,因为不通过原有根证书认证的证书是无奈主动被退出根证书
面试官:你讲得有些快,画下图看看
- 敌人:https 加密过程
- 敌人:服务端证书通过 CA 机构签名认证的过程如下
面试官:后面你说到 CA 机构会用密钥对服务器的公钥进行签名,签名和加密,你是怎么了解
- 敌人:应用非对称加密算法时,签名是用来示意应用私钥的加密过程
- 敌人:如果用公钥对数据加密,是加密
- 敌人:反之用私钥对数据加密,则称之为签名
面试官:那 CA 证书是什么?
- 敌人:CA 证书是为了确保服务端的公钥是准确无误,没被批改过的
- 敌人:证书通常蕴含这些内容 (1) 服务端的公钥;(2) 证书发行者(CA) 对证书的数字签名;(3) 证书所用的签名算法;(4) 证书公布机构、有效期、所有者的信息等其余信息
面试官:你讲到 HTTPS 用到了加密算法,加密算法都有哪些类型,说说看
- 敌人:加密算法分三大类:单向加密,对称加密算法和非对称加密算法
面试官:对称加密和非对称加密有什么区别吗
- 敌人:应用对称加密时,加密和解密用的都是同一个密钥;而非对称加密,则是两个密钥,公钥加密则须要私钥解密,私钥加密则须要公钥解密。不能私钥加密,私钥解密
面试官:MD5、SHA、Base64 和 RSA 属于什么类型的算法,对称还是非对称?
- 敌人:MD5、SHA,称为摘要算法,能够归类为单向加密算法,其计算出的摘要信息,是不可逆向复原成原来的数据
- 敌人:RSA 属于非对称加密算法
- 敌人:而 Base64 并不算是加密算法,它更多时候是被称为一种数据编码形式
面试官:用过哪些 HTTP 客户端工具类?
- 敌人:apache 的 CloseableHttpClient、jdk9 的 httpClient 和 spring clould 体系里的 ribbon、feign
面试官:有没有遇到过应用 https 证书问题,如果有,是什么问题呢?
- 敌人:当然,有一次应用 apache-httpClient 加载自定义证书时(没通过 CA 认证),测试服抛出证书无奈信赖,然而本地运行却没问题
- 敌人:起因是证书在本地生成的,那时曾经默认退出到根证书下了,而测试服 jre 的根证书目录(/lib/security/cacerts)是没有这个证书,放在我的项目 resource 下的证书也无奈没失效
面试官:哦,那你是怎么解决的
- 敌人:三种解决方案。1- 重写 TrustManager,无条件信赖证书;2- 把证书加到 jre 的根证书目录;3- 通过 CA 认证
面试官:网络数据抓包理解不
- 敌人:在 linux 零碎能够应用 tcpdump 命令对 tcp 申请数据抓包,抓到的数据输入到一个文件;而后能够在 window 应用 wireshark 软件加载 tcp 数据文件,它能够提供界面剖析
面试官:讲得还不错,那上面咱们换个话题,聊聊 mysql 事务 ….
- 敌人:能够啊,我也略微理解过一些事务的常识 …
欢送指注释中谬误(故事纯属虚构,如有雷同纯属巧合)
参考文章
- 图解 HTTPS 建设过程
- 摘要、签名与数字证书都是什么?
- 数字签名是什么?