https是什么/http及https的区别/https的作用/https的原理/在自己本地怎么开启https/网站如何适配https/开启https之后对网站的速度有什么影响/怎样使浏览器默认用https打开网页
https是什么?
https是http的加密版本,是在http请求的基础上,采用ssl进行加密传输。http默认是80端口,而https默认是443端口。
http及https的区别
如下图所示,https在http多出了一个安全层的概念。并且http是明文传输,很容易被窃听,被篡改,被冒充。而在https里面的加密,签名,证书可以很完美地解决这些问题。
https的原理
在了解https的原理之前,需要先了解下面几个重要的概念。
1.非对称加密:加密和解密的秘钥不一样。计算量大,速度慢。(只有在协商对称秘钥时采用到。)
2.对称加密:加密和解密的秘钥一样。计算量小,速度快。(只有在通信时候才用到。)
3.签名:为了防止被篡改。
4.数字证书:为了防止被冒充,需要去CA申请证书。
接下来就要用一个很有名的bob和他的三个朋友的故事先来铺垫一下原理。
如下图所示,bob有三个朋友Pat,Doug,Susan。
- bob想要跟他的朋友通信,但是不想用明文传输,以免其他人窃听。于是他创建了两个钥匙。一个私钥,一个公钥。私钥自己留着。公钥发给他的朋友们。他朋友们发给他的信息加密之后,bob可以用私钥解密查看。bob加密发送信息给他的朋友们之后,朋友们可以用公钥解密查看。
- 但是bob发现,因为他的公钥是公共的,他发送给朋友的信息可能会被别人篡改。于是他把新的内容hash处理之后再用私钥加密成签名,一起发送给朋友。朋友获得信息之后,用公钥解密签名得到Digest。然后再用同样的hash去解密内容获得Digest。最后看这两个Digetst是否相等。如果相等则内容未被修改。如图中2所示。
- 但是有一个同学Tony获取了bob的公钥之后冒充bob去跟susan通讯。被bob发现了之后他去第三方证书中心做认证。证书中心用自己的私钥对Bob的公钥和其它信息做了一次加密。这样Bob通过网络将数字证书传递给他的小伙伴后,小伙伴们先用CA给的公钥解密证书,这样就可以安全获取Bob的公钥了。
但是,其实https的通信会比上面复杂很多,可以看下面的图片。
- 浏览器向往服务器的443端口发起请求,请求携带了浏览器支持的加密算法及哈希算法。
- 服务器收到请求,服务器会选择浏览器支持的加密算法和哈希算法。
- 服务器下将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的。
- 浏览器进入数字证书认证环节,这一部分是浏览器内置的TLS完成的:
4.1 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。
4.2浏览器生成一个随机数R,并使用网站公钥对R进行加密 - 浏览器将加密的R传送给服务器。
- 服务器用自己的私钥解密得到R。
- 服务器以R为密钥使用了对称加密算法加密网页内容并传输给浏览器。
- 浏览器以R为密钥使用之前约定好的解密算法获取网页内容。
如图所示,1-5步是https的握手过程,他是用非对称加密算法获取了秘钥R。在6-8步是服务器及浏览器的通信过程,是用秘钥R进行对称加密通信。
本地怎么开启https?
生成私钥和证书
- 首先,进入你想创建证书和私钥的目录,
- 创建服务器私钥,命令会让你输入一个口令:
openssl genrsa -des3 -out server.key 1024 - 创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr - 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key - 最后标记证书使用上述私钥和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
配置nginx
重启nginx后在打开网页便会得到下面的提示
当然,chrome可以配置信任证书,这个可以百度~
网站如何适配
http资源无法加载。js文件会直接提示加载不到。图片等文件会提示报警mixed content。当然,之前chrome有个版本是在https的网页,直接不显示图片。后来为了用户体验,显示图片但是会警告。
而在我们的网站中,在加载资源时,是需要协议头即可。页面会自适应在http时自动添加http头,https时自动添加https头。
https速度影响
https需要加密解密,需要交换私钥/公钥,肯定需要消耗时间。据统计,一般https的连接时间是http的三倍。
怎样使浏览器默认用https打开网页
HTTP strict transport security:该协议会使浏览器默认采用https访问。如下图天猫的加载。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。