⦁ 1.Http传输数据存在的问题
首先,让我们来看一下这个案例需求:用户访问一个网站,首先我们想到的就是http协议传输,超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。HTTPS在HTTP的基础上加入了SSL(Secure Sockets Layer, 安全套接字层)协议,SSL依靠证书来验证服务器的身份,为浏览器和服务器之间的通信加密。
⦁ 2.https简介
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。实现原理是在HTTP下加入SSL层,SSL负责加密和解密数据。
⦁ 3.https和http的区别
⦁ https协议需要到ca申请证书,一般免费证书很少,需要交费。
⦁ http是超文本传输协议,信息是明文传输,连接很简单。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
⦁ http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
⦁ SSL
⦁ 定义
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
⦁ 作用
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
⦁ SSL安全加密方式
我们都知道https能够加密信息,以免敏感信息被第三方获取与篡改,所以很多网站或电子邮箱等安全级别较高的服务都会采用https协议,关于加密与解密,首先我们要了解加密方式,分为对称加密与非对称加密。
⦁ 对称加密(Symmetric Cryptography)
5.1.1.定义
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。
5.1.2.工作过程
描述工作过程
1、甲乙双方拥有同一个密钥(key B)。
2、甲方使用该密钥(key B)对机密信息进行加密后再发送给乙方。
3、乙方再用同一个密钥(key B)对加密后的信息进行解密。所以甲乙双方都是用同一个密钥进行加密与解密。
在传输过程中,如果攻击者截获了传输的密文和偷取了任一方的密钥,就可以破解密文。
同样,如果乙要回复加密信息给甲(使用该key B密钥),甲也只需要使用该密钥进行解密。
5.1.3.对称加密优点
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
5.1.4.对称加密缺点
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
⦁ 非对称加密(Asymmetric Cryptography)
5.2.1.定义
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这个锁头锁起来的东西。
5.2.2.工作过程
图解
描述工作过程
1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。
同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。
5.2.3.非对称加密优点
非对称加密与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
5.2.4.非对称加密缺点
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
⦁ 5.3.总结
⦁ 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
⦁ 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
问题思考:
在网络传输中一直采用对称加密会带来不安全,如果一直采用非对称加密会带来性能问题,那怎么办?
解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。https协议传输数据的加密与解密就是使用非对称与对称加密相结合处理实现的。接下来我们一起学习https的工作原理。
⦁ https工作原理
我们一起来看看https工作过程图图解,之后针对图解每个标注的步骤进行过程分析与说明。
⦁ 6.1.工作原理图解
http加密、解密及验证过程如下图:
⦁ 6.2.工作原理实现过程
⦁ 客户端浏览器发起HTTPS请求。就是用户通过浏览器输入一个https网址,然后连接到server的443端口。
⦁ 服务器配置。采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向CA(产生和确定数字证书的第三方可信机构)等组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书不会弹出提示页面。
CA是PKI系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party,简称TTP)。作为可信第三方的行为具有非否认性。证书中绑定了公钥数据、和相应私钥拥有者的身份信息,并带有CA的数字签名。证书中也包含了CA的名称,以便于依赖方找到CA的公钥、验证证书上的数字签名。
⦁ 服务器向浏览器响应数字证书。传输的数字证书主要包含了公钥与服务器身份标识信息。
⦁ 客户端浏览器验证解析数字证书。首先会验证数字证书中的公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机码,然后使用证书的公钥对该随机值进行加密。
⦁ 浏览器传送加密信息给服务器端。这部分传送的是用证书加密后的随机值,目的就是让服务器端得到这个随机值,以后客户端和服务器端的通信就可以通过这个随机值来进行加密与解密了。(确保安全的将对称加密的密钥传输给浏览器与服务器)
⦁ 服务器端解密信息。服务器端使用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该随机值进行对称加密响应数据信息。因为客户端与服务器端都有这个随机值(对称加密的密钥),所以服务器与客户端后面的数据传递都是用这个加密与解密。
⦁ 服务器传输加密后的响应数据给浏览器。这部分信息是服务器端使用对称加密的密钥加密后的信息,可以在客户端被还原。
⦁ 客户端解密信息。客户端利用之前生成的随机值(对称加密的密钥)进行对服务器传过来的信息进行解密,最后获得到数据信息内容。整个过程攻击者就算监听到了数据,也束手无策。
注意:
https的加密采用了非对称与对称加密的相结合实现的。
服务器实现https协议
⦁ 服务器实现https协议
⦁ 配置
⦁ 生成密钥库
确保环境变量配置了%JAVA_HOME%\bin,因为生成密钥库是使用jdk中的keytool工具。
进入dos命令运行如下命令:
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore key.keystore
-genkey -alias 表示生成证书别名
-keyalg 指定密钥算法,这里指定为RSA算法。
-keysize 指定密钥长度,默认1024位。
-validity 指定证书有效期,这里指定为365天。
- keystore 指定密钥库存储位置,这里是key.keystore(默认生成在计算机用户名目录下)
执行过程中会询问你一些信息,比如国家代码,省市等,其中需要填写两个密码,一次在开头,一次在最后,请保持两个密码相同。比如,我将密码都设成123456。
如果不同,启动会报错,大概是下面这样的:java.io.IOException: Cannot recover key
执行过程
执行完成后会生成一个.keystore文件(密钥库),将它复制到tomcat的conf目录下(并不一定,放哪里都可以)
⦁ 配置tomcat启用https协议并指定密钥库
修改tomcat的server.xml文件中的如下节点去掉注释
原有
修改添加2个属性与值为如下
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/key.keystore"
keystorePass="123456" />
其中123456是生成key.keystore时设置的密码,如果只想用https访问,需要注释原来的8080端口监听
<!-- Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" --/>
⦁ 浏览器使用https协议访问服务器
⦁ 打开浏览器访问
360访问效果
IE浏览器访问效果
由于证书是我们自己生成的所以需要客户端验证,如果是向CA等组织申请的授信证书就不需要。
⦁ 点击IE浏览器继续浏览此网站
⦁ 点击证书错误,查看证书与在受信任机构安装证书
SSL证书种类
域名型 https 证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;
企业型 https 证书(OVSSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
增强型 https 证书(EVSSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。
⦁ https的优缺点
⦁ 优点
安全性方面
在目前的技术背景下,HTTPS是现行架构下最安全的解决方案,主要有以下几个好处:
1、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
2、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
3、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
⦁ 缺点
技术方面
1、相同网络环境下,HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。
2、HTTPS协议的安全是有范围的,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
3、最关键的,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
成本方面
1、SSL的专业证书需要购买,功能越强大的证书费用越高。个人网站、小网站可以选择入门级免费证书。
2、SSL 证书通常需要绑定固定IP,为服务器增加固定IP会增加一定费用;
3、HTTPS 连接服务器端资源占用高较高多,相同负载下会增加带宽和服务器投入成本;