设为首页 收藏本站
查看: 1054|回复: 0

[经验分享] 网络通信中的加密解密及openssl和创建私有CA详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-15 08:28:09 | 显示全部楼层 |阅读模式
1、为什么网络通信要进行数据加密?
我们在网络进行通信时候,如果数据以明文的方式传输,在传输过程中,数据可以被篡改、窃听、伪装等,如图:

wKioL1gpVIThlhLvAABspNE_eyw296.jpg
当A向B通信时,C可以在数据传输的过程,将数据进行抓包,例如应用wireshark抓包软件,就可以抓取通信的数据包,进行对抓到的内容进行分析,得出传输数据的内容。
2、数据加密方式有哪些?
从分类上划分,加密技术有四种:
1)对称加密
◆ 对称加密:加密和解密使用同一个密钥
      ·DES:Data Encryption Standard,56bits
      ·3DES:
      ·AES:Advanced (128, 192, 256bits)
      ·Blowfish,Twofish
      ·IDEA,RC6,CAST5
◆ 特性:
      ·加密、解密使用同一个密钥,效率高;
      ·将原始数据分割成固定大小的块,逐个进行加密;
◆ 缺陷:
     ·密钥过多;
     ·密钥分发;
      ·数据来源无法确认
◆ 事例说明:其实我们平时用的最多的加密方式就是对称加密算法,比如我们使用通过https的方式浏览网页。只是在进行页面数据传输前,通过非对称加密的方式来传输对称秘钥,后面会详细介绍。

2)非对称加密(公钥加密)
◆ 非对称加密采用公钥加密,同时还需要另一个秘钥来解密,也就是私钥;两者统称为密钥对。
      ·公钥:从私钥中提取产生,公开给所有人;public key
      ·私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key
◆ 特点:
      用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
◆ 功能:
      ·身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份;私钥加密的这个过程为数字签名。
      ·密钥交换:与被通信方之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方;
      ·数据加密:适合加密较小数据(不常用,比对称加密要慢3个数量级)
◆ 缺点:
      密钥长,加密解密效率低下
◆ 算法:
      RSA(加密,数字签名),DSA(数字签名),ELGamal

◆ 基于一对公钥/私钥对
      用密钥对中的一个加密,另一个解密
◆ 实现加密过程:
       ·接收者
           生成公钥P和私钥S
           公开公钥P,保密私钥S
       ·发送者
           使用接收者的公钥P来加密消息M
           将P(M)发送给接收者
       ·接收者
          使用私钥S来解密:M=S(P(M))
◆ 实现数字签名:
       ·发送者
           生成公钥/私钥对:P和S
           公开公钥P,保密密钥S
           使用私钥S来加密消息M
           发送给接收者S(M)
       ·接收者
           使用发送者的公钥来解密M=P(S(M))
           结合签名和加密
           分离签名
事例说明:我们在银行办理网银时,银行提供的U盾就是含有公钥的证书。银行之所以当面提供U盾,就是以一种可靠的方式把公钥给我们,防止被冒充。记得以前在网页使用支付宝的时候,也必须要要下载加密控件,这也是含有公钥的证书,用来加密数据。

3)单向加密
◆ 只能加密,不能解密,因为解密过程是一个二次加密的过程;主要是提取数据的特征码,即“数据指纹”
◆ 特性:
       ·任意长度输入
       ·固定长度输出
       ·若修改数据,指纹也会改变(“不会产生冲突”)
       ·无法从指纹中重新生成数据(“单向”)
◆ 功能:
       数据完整性(完整性校验)

       系统账号密码校验
◆ 算法:
       md5:Message Digest 5(消息摘要),128bits;
       sha1:Secure Hash Algorithm 1(安全哈希算法) ,160bits
       sha224,sha256,sha384,sha512
事例说明:我们平时访问网站,需要注册账号密码,网站就是以单向加密的方式,将密码加密放到数据库,我们在下次输入认证时,网站程序根据相应的加密算法加密我们提供的密码数据,与数据库里加密的密码进行对比,网站就是基于这种方式进行认证的,所以网站后台服务器也不知道我们的明文密码,这就是当你的密码忘记时,只能修改的原因了。当然,我们提供原始密码给网站是,也是通过加密传送的。

4)密钥交换
◆ 密钥交换(IKE):双方通过交换密钥来实现数据加密解密;密钥交换有两种
公钥交换:将公钥加密后通过网络传输到对方进行解密,这种方式很有可能别截获破解,不常用;

DH:双方共有一些参数,共同协商加密算法,除此之外双方还有属于自己的私有参数,通过共有参数、私有参数和算法信息来进行加密,然后双方将计算后的结果进行交换,交换完成后再和属于自己私有的参数进行特殊算法,经过双反计算后的结果是相同的,而这个结果就是密钥。
        如:A有p和g两个参数,A还有一个属于自己的私有参数x;

          B有p和g两个参数,B还有一个属于自己的私有参数y;
          A和B有相同的加密算法即:
              A:p^x%g
              B:p^y%g
          然后双方交换计算后的结果,此时
          A拿到B的p^y%g,B拿到A的p^x%g,双方再和自己私有参数进行相同的算法,即
              A:对p^y%g 再求x次方得(p^y%G)^x=p^xy%g
              B:对p^x%g 再求y次方得(p^x%G)^y=P^xy%g
          最后A和B的结果是一样的

  注意:整个过程中对于第三方人员来说只能获取p,g两个值,AB双方交换的是经过计算后的值,因此这种加密算法是很安全的。


3、通信中是如何进行数据加密的?
当Tom要向Jerry通信时,在网络世界A和B肯定是素未谋面的,如果使用非对称加密,那么Tom、Jerry肯定要先交换公钥,用来加密传送的数据。如下图:
wKioL1gpWfDTP7PVAACz_3XOMs4668.jpg
Tom和Jerry通过公共网络交换公钥,TOM和Jerry通过对方的公钥加密数据,用自己的私钥解密数据,看似天衣无缝,大家有没有想过,在通信链路上,会有第三个人,在TOM向Jerry通信时,冒充Jerry,在Jerry通信时,在冒充Tom。然后Tom和Jerry看似两个人通信,实则有个中间人,不停的窃取信息,过程如图:
wKiom1gpXTjhiB20AADJhKcMBjE638.png-wh_500x0-wm_3-wmp_4-s_2505156785.jpg
当Tom向Jerry发送公钥时,第三方jack冒充Jerry,接受到Tom的公钥,并将自己的公钥发给Tom,Tom以为一直在和Jerry通信,其实是在Jack通信。
如何避免这种情况呢?
这里就不得不提到PKI了:公钥基础设施
先说明几个概念:
◆ PKI: Public Key Infrastructure
公钥基础设施:

       签证机构:CA(Certificate Authority)
       注册机构:RA
       证书吊销列表:CRL
       证书存取库:
◆ X.509:定义了证书的结构以及认证协议标准
       版本号:version
       序列号:serial number CA用于唯一标识此证书;
       签名算法标志:
       颁发者:即CA自己的名称;
       有效期限:两个日期,起始日期和终止日期
       主体名称:证书拥有者自己的名字
       主体公钥:证书拥有者自己的公钥信息
       发行者的唯一标识:
       证书主体的唯一标识
       CRL分发点:
       扩展信息
       发行者签名:CA对此证书的数字签名
◆ 验证证书过程:
     1.用CA的公钥去解密CA的全名,能解密说明证书来源可靠;

     2.用同样的加密算法去加密证书取得特征码,与解密出的特征码相比较,如果二者相同,说明证书完整性可靠;
     3.检查证书的有效期限在不在当前合理的有效范围内;
     4.验证主体名称和期望通信的对方是否一致;
     5.检查证书是否被吊销。
◆ 证书类型:
      证书授权机构的证书
      服务器
      用户证书
◆ 获取证书两种方法:
     1.使用证书授权机构;
          生成签名请求(csr)
          将csr发送给CA
          从CA处接收签名
     2.自签名的证书;
          自已签发自己的公钥

上面在介绍非对称加密是也说过了,非对称加密的缺点是加密速度慢,所以在进行数据传输时,我们是不使用非对称加密的。而是使用公钥加密对称密码,传输给对方,私钥进行数据签名。利用CA证书,进行公钥认证
具体是如何实现的呢?
看下图:
wKiom1gpbyPjiFZdAAG3aWs3gEs802.jpg 加密过程说明:
1)Tom和Jerry利用非对称加密算法获得一对公钥私钥,利用公钥向证书颁发机构CA申请证书;
2)Tom需要和Jerry通信时,会将双发的公钥发给对方,对方通过根证书验证,防止证书被验证;
3)Jerry向Tom发送数据时,Jerry会利用某种单向加密算法,提取data的特征码,再利用自己的私钥加密特征码,形成数字签名(数据签名是为了实现身份认证);Jerry会生成一个随机对称秘钥,用于加密Tom请求的数据、特征码和数字签名,然后用Tom的公钥加密随机对称秘钥。最后将这一段数据通过网络发送给Tom。
4)Tom收到数据,利用自己的私钥解密,得到对称密钥,进而用对称密钥解密得到data、特征码和数字签名;使用同一种算法来计算data的特征码,与Jerry发来的特征码对比,如果相同,数据 的完整性得到验证;用Jerry的公钥解密数字签名,能够解密,Jerry的身份得到验证。
CA证书最主要的功能就是认证我们要访问的服务器公钥有权威性;而公钥是可以公开的,为了加密传送的数据(一般是用来加密对称密钥的);对此密钥是临时随机生成的,为了更快的加密解密数据。
4、https方式进行数据传输的具体流程
下面来说说PKI的具体实现,我们以SSL(安全套接字层)为例。
http是超文本传输协议,https就是以ssl为基础的超文本传输协议,我们平时上网,像支付宝网站使用的就是https协议。为什么呢?因为支付宝涉及到金融方面,当然要加密。但是现在百度也用https了,上面说过了,数据加密传输会导致传输过程变慢,那百度又为什么使用https协议呢,因为如果不加密,我们申请的页面在中途可以被网络运营商添加了其他数据(比如广告)。
流程如下:
wKioL1gph1zD65N7AADmHGxmF-Q932.jpg
具体的四个阶段说明:
第一阶段:ClientHello:
                                            支持的协议版本,比如tls 1.2;
                                            客户端生成一个随机数,稍后用户生成“会话密钥”
                                            支持的加密算法,比如AES、3DES、RSA;
                                            支持的压缩算法;

                                第二阶段:ServerHello
                                            确认使用的加密通信协议版本,比如tls 1.2;
                                            服务器端生成一个随机数,稍后用于生成“会话密钥”
                                            确认使用的加密方法;
                                            服务器证书;

                                第三阶段:
                                            验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)                               
                                            发送以下信息给服务器端:
                                                    一个随机数;
                                                    编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
                                                    客户端握手结束通知;

                                第四阶段:
                                            收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
                                            向客户端发送如下信息:
                                                    编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
                                                    服务端握手结束通知;
5、SSL 的工具实现 OpenSSL

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-300467-1-1.html 上篇帖子: HA-web-services实验 下篇帖子: CentOS下通过命令行制造CPU负载或压力 加密 通信 网络
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表