一、概念
HTTP:是超文本传输协议;是互联网应用最广泛的一种网络协议,是一个客户端和服务器请求和应答的标准(TCP),用于从www服务器传输超文本协议到本地浏览器的传输协议,不提供任何方式的数据加密。因此它不适合传输一些敏感信息比如:信用卡号、密码等信息。
HTTPS: 是安全超文本传输协议;它是一个安全通信通道,是基于HTTP的开发,用于客户计算机和服务器之间交换信息。HTTP下加入SSL(安全套接字层)层,使用40位关键字作为RC4流加密算法。
HTTPS协议的主要作用可以分为两种:一种是建立信息安全通道,来保证数据传输的安全性;另一种是确认网站的真实性。
总结:简单的来说,HTTP是基于TCP的无连接、无状态的HTTP协议;而HTTPS则是基于TCP协议之上加入了一层SSL/TSL协议,该协议会结合证书对客户端和服务器之间的通信进行加密,确保安全性和可信性。
二、HTTP与HTTPS的区别
http 明文传输无加密,而https 是安全的加密传输,对通信信息进行了加密;
http 与 https 的URL开头不一致;例如 http是以 http://开头,而https 是以 https:// 开头。
http 是超文本传输协议,https 则是具有安全性的SSL加密传输协议。
http 的标准端口是 80,而 https 的标准端口是443.
在OSL网络模型中http 是应用于应用层,而 https 则是在传输层。
三、HTTP的工作原理
1、HTTP请求相应模型
HTTP由请求和响应构成的,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器去回送响应。
HTTP是一个无状态的协议。无状态是指客户机和服务器之间不需要简历持久的链接,这意味着当一盒客户端向服务器发送请求,然后服务器返回响应,链接就被关闭了,在服务端不保留链接的有关信息。HTTP遵循着请求/应答模型。
2、HTTP工作原理或过程
一次HTTP操作成为一个事务,其工作的整个过程如下:
1)、地址解析
如客户端浏览器请求的这个页面: http://localhost:8080/index.index
从中分析出协议名、主机名、端口名、对象路径等,而对于上面的地址我们可以得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:index.html
2)、封装HTTP请求的数据信息
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包。
3)、封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作之前,客户机首先要通过网络与服务器简历连接,该链接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的tcp/ip 协议族,因此又被称为 TCP/IP网络。
HTTP是比TCP更高层次的应用层协议,根据规则只有底层协议建立之后才能进行更高层协议的连接。
4)、客户机发送指令
建立连接后,客户机发送一个请求给服务器,请求的方式为:统一资源标识符(URL)、协议版本号,后面是MIMME信息包括请求修饰符、客户及信息和可见内容。
5)、服务器响应请求
服务器响应后给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能信息。
实体信息是服务器向浏览器发送头信息后,他会发送一个空白行表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
6)、关闭服务器的TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
四、HTTPS工作原理
1、HTTPS请求相应模型
2、HTTPS工作原理或过程
1)、客户端使用https 的 url 访问服务器443端口,要求建立SSL连接。
2)、服务器收到请求后,将网站的证书信息(CA证书的公钥)传送一份给客户端。
3)、客户端收到公钥后,首先会验证证书是否存在问题,若没有问题就生成一个随机值,然后用服务器给的公钥对该随机值进行加密,最后发送给服务器。
4)、服务端收到数据后,利用证书的私钥进行解密,得到随机值,将该随机值作为后继通信的私钥,对后继的传输信息进行加密。
5)、客户端后继收到的数据,利用该随机值进行解密得到真正的内容。
五、https通信的优劣:
1)、客户端产生的密钥只有客户端和服务器端能得到;
2)、加密的数据只有客户端和服务器端才能得到明文;
3)、客户端到服务端的通信是安全的。
劣势:
1)、增加计算开销,因此较为费时和低效。
2)、ssl 证书需要费用,且功能与费用挂钩。
3)、HTTPS 协议加密范围有限,且该信用体系安全性并不高,特别对于某些国家可以控制 CA 根证书情况下,中间人攻击一样可行
六、如何配置HTTPS
配置https最重要的是配置ssl证书,配置SSL证书可以参考 SSL证书部署指南:https://freessl.wosign.com/guide这里以自签证书来演示。
1)、生成自签证书
生成私钥文件
sudo openssl genrsa -out server.key 2048
生成自签证书文件
sudo openssl req -new -x509 -days 1826 -key server.key -out server.crt
2)、修改Apache的配置
apache2.4需开启的模块:
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
sudo vim httpd-ssl.conf
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain.com:443
SSLEngine on
SSLCertificateFile /usr/local/apache/conf/server.crt #添加证书文件
SSLCertificateKeyFile /usr/local/apache/conf/server.key #添加私钥文件
</VirtualHost>
检测配置文件是否有错误
sudo apachectl configtest
重启apache
sudo apachectl restart
七、Nginx配置https
server{
listen 443;
server_name xxx.xxx.com;
root /opt/https/;
ssl on;
ssl_certificate vhost/keys/xxx.xxx.com.crt;
ssl_certificate_key vhost/keys/xxx.xxx.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
index index.html;
root /opt/https;
}
}
配置文件参数 | 说明 |
listen 443 | SSL访问端口号为443 |
ssl on | 启用SSL功能 |
ssl_certificate | 证书文件 |
ssl_certificate_key | 私钥文件 |
ssl_protocols | 使用的协议 |
ssl_ciphers | 配置加密套件,写法遵循openssl标准 |
使用全站加密,http自动跳转https
server{
listen 80;
server_name xxx.xxx.com;
rewrite ^(.*) https://$host$1 permanent;
}
八、使用HTTPS可能带来的问题
- https网站中存在http外部接口
- CDN静态资源使用了http
- charles抓包调试
版权声明:本文为博主原创文章,转载请附上博文链接!