加密算法与https详解

1.加密算法的历史

1.1简述

  在古时候就有飞鸽传输,快马加书信的方式进行通讯,在传输的过程中如果被他人劫持,将信息内容替换,便很难对信息进行是否正确的判别。慢慢的,人们想出了一种方式,使用一种规则将文字打乱,再用同样的规则将文字复原,这便是加密解密的根源了。
随着时间的流逝,这种规则也慢慢的被出现不同的版本,例如在密码学的原始的凯撒密码。

1.1 凯撒密码

  凯撒密码据说是凯撒在战争中与将军们交流的一种加密的方式,其原理十分的简单,就是让字母都具有统一的偏移量,使得原本正常的文字,在每个字母偏移后形成无法识别的文字。在当时的那个时代,这种方式十分的有效,因为那时候的人们没有现在的人那么精明,很多还是目不识丁的,而且没有计算机去进行枚举解密。

2.现代加密方式

2.1 常见加密的种类

1)哈希(hash)算法    2)对称加密算法   3)非对称加密算法

2.2 哈希算法

哈希算法使用的是散列值法,通过一种对应的散列公式将key转换成hash值,也是一种较为优秀的地址存储方式,一般来说,这种算法加密是无法进行破解的,网上所谓的破解一般来说只有以下三种方式:

  1. 时间解法:一个个的去匹配hash值,进而求出对应的key
  2. 空间解法:列出尽可能多的key-value,存储到对应的介质中,再去匹配。
  3. 彩虹表法
      首先定义哈希加密函数H,Q=H§表示将明文密码P加密成哈希串Q;然后定义规约函数R,p=R(Q)表示将哈希串Q转换成明文p,注意p不是真正的密码P。将一个可能的密码p0交替带入H和Q两个函数进行运算,先后得到q1,p1,q2,p2,…,q(n-1),p(n-1),qn,pn。其中p是明文,q是哈希串,它们组成的链称为哈希链,n是哈希链的长度,一般大于2000。将哈希链的首尾元素p0和pn做为一个数对存入表中,中间的其它元素全部删除。由多个数对组成的表称为彩虹表。本文彩虹表不是重点,只做简单介绍,可移步点击这里进行了解。

具代表性的哈希加密:md5加密,sha加密

2.3 对称加密算法

  何为对称,跟照镜子一样,同一个镜子照出的同个人都是一样的,简单来说,就是使用相同的规则进行加密解密,两端通过同一个密钥进行明文的加密和解密,但是这种密钥的传输安全问题又无法得到保障,假设在传输密钥规则的时候被黑客拦截了,黑客知道密钥后也可以直接进行密文解密。因次这种加密算法仍然有弊端存在,在于如何安全的传递密钥。

具代表性的对称加密算法:DES,3DES,AES

2.4 非对称加密算法

  非对称加密拥有一套匹配的公钥和私钥,明文可以使用公钥加密成密文,密文再用私钥进行解密成明文,也可以反过来,用私钥加密,公钥继续解密。大致的流程图如下:
加密算法与https详解_第1张图片
(图片来源于小灰)

那么整合起来如下:
加密算法与https详解_第2张图片
(图片来源于小灰)

这时候又有一个问题了:

  假设有A端,B端,M端(黑客端)
即使使用非对称加密进行密钥的传输,但是如果在A在传输公钥给B的时候被M拦截了,M传递了自己的公钥给B,B使用公钥将密钥加密后传给A,又被M拦截了,那么M就可以用自己的私钥解密获得了与AB通讯的密钥了,然后M再把密钥用其公钥加密给A,这样AB就在以为正常的情况一直被M获取通讯内容。

  如果读者学过网络,应该都是知道网络包的源地址是无法修改的,但是正常来说网站的ip和客户端的ip也并不是一成不变的,原本我以为只要验证源ip即可,但是朋友说服了我,我们不可能去记那么多ip。此时,如何通过第三方权威机构认证来保证安全就很重要了。

2.https与http协议

2.1简述:

  web开发的兄弟姐妹肯定对http协议完全不陌生,浏览器请求服务器的资源一般来说使用的都是http协议,只有少数的请求是websocket等,但是这里我想基于前面重点讲讲https的优势。

2.2 https是什么?

  这几年https开始慢慢兴起,估计很多人都听过一些简单的概念,但是绝大多数的人对其认识仅仅在于:它是一种安全的http协议,是http+ssl构成的,对传递的参数会进行加密。说实话,当初我去面试的时候也是这么回答的。

2.3 HTTP与HTTPS有什么区别?

  HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的主要区别如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

2.5 HTTPS的优点

尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

(4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

2.6 HTTPS的缺点

  虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

HTTP内容参考来源:
(https://www.cnblogs.com/wqhwe/p/5407468.html)

2.7 https的通信原理

  原理实际上也是非对称加密加对称加密,基本的过程和上面的整合图是一样的,但是比较重要的一点是ssl证书可以权威认证对方的身份,因此解决了上面所提及的问题。

3.如何申请ssl证书

3.1简述:

  网上有很多免费使用的证书,有的证书有效期不长,但是可以通过脚本自动免费续签,这里我采用腾讯云的亚洲诚信品牌免费型DV版SSL证书,每个主域可以申请20个证书,且不支持泛域名。

3.2例子环境

供应商:腾讯云主机

os : Ubuntu14.04

环境: php7.0+apache2+mysql

3.3准备工作

  1)首先得有一台正常的服务器可以跑基本的http协议的页面

  2)申请证书:
加密算法与https详解_第3张图片
加密算法与https详解_第4张图片

  3)下载证书并扔到服务器上:

  在证书列表选择对应的证书下载即可,下载完后是一个压缩包,解压获得4个文件夹,分别是 Apache、IIS、Nginx,Tomcat 服务器的证书文件。此时你可以使用winscp,filezilla等工具上传文件,不过我这里建议直接使用命令方便点吧。linux有rz,sz命令,可以用来上传和下载文件,如果你没用过肯定是要装了.

centos(yum install lrzsz)

ubuntu(apt-get install lrzsz)

把对应文件夹的三个文件上传到服务器任意目录中,但是你要记得放在哪里,

  4)配置Apache文件

首先,先启用ssl模块:sudo a2enmod ss

然后打开打开文件 /etc/apache2/sites-enabled/000-default
增加如下配置:

<VirtualHost 0.0.0.0:443>
DocumentRoot "/var/www/html" #你的网站根目录
ServerName www.domain.com #域名信息
SSLEngine on
SSLCertificateFile 你放的文件夹/2_www.domain.com.crt #上传的证书文件位置
SSLCertificateKeyFile  你放的文件夹/3_www.domain.com.key
SSLCertificateChainFile 你放的文件夹/1_root_bundle.crt
</VirtualHost>

上面的两个文件的名称记得替换成你实际文件名称

然后,重启Apache,service apache2 restart

如果启动成功,就OK了!

因为总共可以申请20个免费证书,因此如果你有多个子域名,那么就为每个子域名也申请一个证书,然后在对应域名的配置文件中加入跟上面类似的配置即可。

哈哈哈,我的小锁头终于有了。

你可能感兴趣的:(算法,网络,https,加密)