前言

上次敌人对于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建设过程
  • 摘要、签名与数字证书都是什么?
  • 数字签名是什么?