升级https的原因:老大把公司人事管理系统升级到了https,面试的时候可能经常问到https,自己之前了解过https,但是没有去实践过,现在太多网站都是https····还有升级过程并不是十分复杂,那就去做呗。
https原理
HTTPS采用共享密钥加密(对称加密)和公开密钥加密(非对称加密,比较出名的有RSA)两者并用的混合加密机制。在交换密钥使用环节使用公开密钥加密方式,之后建立的通信交换报文阶段则使用共享密钥加密方式
之所以传输过程中用对称加密,是因为非对称很浪费资源
(hash加密是单向的,例如md5,不能解密)
和对称加密还有非对称加密都是不一样的,不管是对称加密还是非对称加密,通过秘钥都是能解密的,但是hash,只能维持 hash(内容)之后的值保持一致,这也是我们数据库中只保存用户密码加密后的值就可以验证用户的密码是否正确了,因为我们可以每次获取到用户信息之后只要hash一下,然后和数据库中做下对比就可以了。
https ,首先让服务器和ca交互,获取服务器的公钥,这个过程是非对称加密,获取到公钥
https升级过程中遇到的问题:
- 不允许脚本调用http,可以先把接口转发到我们本地的服务起的https上,然后通过nginx转发到别人网站上的接口,因为本身调用外来接口接口比较少,这样能符合我们的需求
- https证书申请无效(每个域名都需要申请单独的证书,之前以为只要申请一个www.chenye2017.cn证书就可以了,chrome直接显示https不安全,其实通过微软的edage浏览器访问,能清楚的看到证书不匹配的原因)
(证书申请是通过腾讯云,腾讯云上有详细的教程,唯一不足的是没有给文件夹权限,导致第一次访问403)
(https配置虚拟主机应该就和我们在vhost文件里面配置虚拟主机一样,现在是在ssl配置文件里面写)
(话说我现在的服务器,域名用的是阿里的,服务器用的是京东的,https证书用的是腾讯的,zz)
(还有不知道是hexo的原因还是github page 的原因,我的网站上有http的资源竟然不会显示https错误,不知道他是怎么解决这种http资源不出错的,有空可以了解下)
https和http的区别
简单看就是 https = http + SSL
SSL的运行机制,可以参考阮一峰老师的文章,我对上面的一些内容做了些自己理解的笔记
- 其中加密传播是因为我们的传播内容都是通过生成一个第三方不知道的公钥,这个公钥是怎么来的呢,首先通过ca证书,因为系统内容ca的公钥,ca用私钥加密文件内容(私钥加密,公钥解密,不被篡改),我们获取服务器的公钥,这个公钥是干什么的呢,并不是用来进行数据的加密的,而是用来加密传递的数据给服务器(公钥加密,私钥解密,不被获取),服务器接收到客户端的数据进行生成公共密钥,这个密钥是我们以后加密数据用来传递的
(感觉只要记住证书里面的内容都是能保证绝对正确就好了) - 具有校验机制,是因为我们的证书具有这个作用,比如我上次把我从www.chenye2017.cn 上获取的证书放到虚拟站点blog.chenye2017.cn就直接报错
- 配备身份证书,估计也是这个意思
所以ssl 和 tsl 是一样的意思嘛
感觉这个握手不是tcp的那个三次握手,这个开始的时候tcp那个三次握手应该都搭建好了,而且这个也是4次握手
剩下的内容就是4次握手的详细内容了,为什么要4次握手,写的都很详细,就不再补充了,总之这个生成传输加密内容的秘钥也是通过非对称加密,再后面就是http了。
总结一下:
- 通过CA 证书,发送服务器公钥,利用的是非对称加密算法,用的公钥和私钥来自CA(证书的作用是为了保证服务器公钥的正确性,不被篡改)
- 通过CA得到的服务器公钥,大家都可能有,但是我们通过公钥加密,私钥才能解密,和服务器交互,让两端都能生成一致的对称加密算法钥匙(随机因素可以通过客户端利用服务器公钥加密传给服务器)
- 利用生成的公共密钥进行对称加密,传输数据(这个公共密钥在每次连接的时候生成,别人不知道)