立刻要过年了,公司业务上的需求也少了不少,这不,王小二他们召开了一场技术会议,盘点年前能干点啥。nginx
只见C哥写了一份清单,其中一项是全站升级https。ajax
C哥说:https是一种趋势,但目前咱们接口仍是http的。appstore也一直要求使用https,从安全性以及appstore审核的角度来看,咱们年前得全站升级https。有谁挺身而出吗?算法
小二想了一下:我来作吧C哥,正好了解下https。浏览器
C哥:好,小二,那你接下来研究下https,而后有时间再给咱们分享下。安全
小二:好的C哥,保证完成!服务器
据说小二要作https,运维张三胖走到小二身旁。网络
张三胖:小二,据说你要作https?app
小二:是啊,三胖哥,咱们得全站升级https。你以前了解过吗?运维
张三胖:哈哈,我还真了解过,升级https是个不错的注意。工具
小二:三胖哥,那太好了,你有时间给我讲讲?我就不用花时间去查资料了。
张三胖:好,我如今正有时间,给你讲讲,也正好复习下。
小二:多谢三胖哥,今中午请你吃饭啊。
三胖:小二,假设你用http协议给你女友发一封私密消息。这样有没有泄密的风险呢?
小二:固然有了,http协议是明文传输,传输数据过程当中的任何第三方均可以截获并篡改该明文。
三胖微微一笑:是的,咱们画幅图表示下,你就知道信息被篡改多尴尬了,哈哈。
小二:啊?确实是,那这样太尴尬了。我女友不打死我...
三胖:其实用https就能够规避。
三胖:小二,你了解对称加密与非对称加密吗?
小二:了解一些。对称加密就是加密与解密的秘钥是相同的。而非对称加密就是公钥加密的内容,必须用私钥才能解密,私钥加密的内容,必须用公钥才能解密。
三胖:小二了解的还挺多嘛,其实https就是利用了对称加密与非对称加密的特性。但你要注意,对称加密的速度是非对称加密速度的100倍左右。
小二:三胖哥我明白了,那你用刚才的例子给我讲讲https的原理吧。
三胖:好,就用刚才的例子。对称加密速度很快,因此你跟你女友的数据传输最好用对称加密。
小二:能够啊,那我跟我女友就先约定好一个秘钥呗?
三胖:是的,咱们再画张图表示大家的数据传输过程。
小二:是啊,胖哥,这样别人就无法截获个人信息了。
三胖:对。而且由于对称加解密的速度很快,对大家数据传输速度的影响微乎其微。可是,你怎么跟你女友沟通协商秘钥呢?
小二:这还不简单,我直接网上告诉他就能够啊。
三胖:哈哈,不能够。你明文经过网络传输的秘钥被人截取了怎么办?
小二:啊?确实是,别人截取秘钥后又能够篡改个人信息了。
三胖:这时候就须要用到咱们的非对称加密来协商大家对称加密的秘钥了。
三胖:小美生成本身的公钥和私钥,通讯以前,她告诉你她的公钥就能够了,这个公钥由于是公开的,因此能够随意在网络中传输了。
小二:这样啊,我明白了C哥。我获得小美的公钥后,而后用小美的公钥,对对称加密的密码进行非对称加密后发给小美。小美再经过他的私钥解密后,就获取了我生成的对称加密的密码了。是否是?
三胖:对,就是这样的。可是还有一个头疼的问题,你怎么确保你获得的就是小美的公钥呢?假设中间人给你截获篡改了呢?
小二:嗯...这确实是个问题。中间人把他的公钥发给我,这样我就使用中间人的公钥加密咱们对称加密的密码了,而后中间人再用他的私钥解密出咱们对称加密的密码。这时候中间人已经截取了小美的公钥,而后再把咱们对称加密的密码经过小美的公钥加密后发给小美...太可怕了,咱们对称加密的秘钥就这样被窃取了。
三胖:其实抓包工具charles之因此能抓https的包,就是利用的你说的这个原理,一会咱们再细说。那如今问题就变成了,你怎么确保你获得的公钥就是小美的。
小二:哎,真让人头疼...
三胖:你知道咱们平时都有公证处吧?这个公证处是一个可信的结构,经他公证的东西,都是具备可信力度的。
小二:知道啊,前几天还看新闻说一个老太把他在帝都的一套房产经过公证处公证给了一个没有血缘关系的小伙。
三胖:那你想一想,若是小美的公钥通过公证后,是否是就能证实这个公钥是小美的呢?
小二:固然可以证实。只是网络中存在这样的公证处吗?
三胖:还真存在这样的公证处,咱们把网络中的公证处称为CA吧。不得不佩服前辈们,他们把一些可信的CA的证书都预先存在咱们的电脑里了,证书包括CA的信息和CA的公钥。只要你电脑安装了系统,就安装了这些证书。来,你看看我电脑里默认安装的证书。
小二:哦哦,明白了,意思就说这些默认的CA证书是绝对可信的。
三胖:对,就是这个意思。因此,只要CA同时给小美颁发一个证书证实是小美就能够了。CA给小美颁发的证书中,含有小美的我的信息以及小美的公钥。同时,CA也会给小美颁发一个私钥。
你先把小美想象成百度,咱们先来看CA给百度颁发的证书。
小二:也就是说,只要保证CA给小美颁发的证书可以安全传输到我这里来就能够了。
三胖:对,如今的问题就转换成了。小美的证书如何可以安全的传输到你这里?其实,CA给小美颁发的证书中,包含【小美的信息+公钥】、以及数字签名。 数字签名的内容是:使用CA私钥加密过的【小美的信息+公钥】的hash值。
小二:哦哦,我好像明白了。CA的证书包含CA的公钥以及CA的一些信息,而且CA的证书默认存储在个人电脑里了,那我就可使用CA的公钥进行解密操做,从而验证小美的证书是不是正确的了。
三胖:对的。咱们可使用你电脑里CA的公钥解密小美证书里的数字签名,从而获得签名的hash值。而后,你再用一样的hash算法对【小美的信息+公钥】进行hash计算。若是小美证书里签名的hash值与你本身计算出来的hash值一致,就说明这个证书确实是小美的,不然就不是小美的证书。
小二:三胖哥,我算是明白了。https还真是麻烦,但也确实保护了咱们的隐私。
三胖:对,有失必有得嘛!
小二:嗯嗯。我如今经过小美的证书安全的获取了小美的公钥。那我这儿随机生成一个对称加密的秘钥,这个对称加密的秘钥再经过小美的公钥加密后,就能安全的传输给小美了。
三胖:是,小美再用他的私钥解密,就获取了大家约定的对称加密的密码了。之后,大家就可使用对称加密来传输数据,暗送秋波了,哈哈~
小二:三胖哥真是太厉害了,今后不再用担忧跟我女友聊天被恶搞了。
三胖:哈哈。你把你本身想成浏览器,把小美想成服务器。这就是整个https的传输流程。
小二:明白了,我画一下https在浏览器与服务器之间的运行流程,三胖哥你看下对不对。
三胖:不错不错,小二很厉害嘛,基本就是这个流程。
小二:没有没有,还得多谢三胖哥的指教啊,哈哈。
小二:这我还真不知道,按理说https是绝对安全的协议,内容不会被charles抓取啊。
三胖:你记不记得,使用charles抓https包的时候,须要在你手机上安装charles证书而且信任该证书?
小二:对对,是有这一步操做。
三胖:就是这一步操做,可使Charles抓取你的https包。我给你画个流程图你就明白了。
小二:原来是这样,这不就是我刚才说的问题嘛。那么就说明https不是安全的协议了?
三胖:不是的。由于你安装并信任charles证书,是你本身主动的操做,也能够说是你本身主动泄密的结果。若是你不信任该charles证书,那么数据就不会被传输,链接会被直接中断。因此https仍是安全的协议。
小二:我明白了,确实是这样,多谢三胖哥。
https的原理明白了,接下来的事情天然就水到渠成了。
小二列出了接下来要作的事情: 一、向CA(公证处)申请本身网站的证书; 二、修改代码里静态资源的http连接为https连接; 三、修改ajax里面的http连接为https连接; 四、将证书部署在nginx上; 五、自测完成。
按照这个列表,小二一步步的顺利完成了。
最终,https上线完成,惬意的享受午后的阳光吧,happy done~