HTTP与HTTPS的原理与区别

一、概念

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 443SSL访问端口号为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抓包调试

 

版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值