让数据传输更安全

在阅读RabbitMQ数据传输安全的章节时,提到了ssl协议,用了很大篇幅介绍使用openssl生成一些列秘钥和证书,若是没有相关基础,会不太好理解,本篇就来总结下数据安全相关的概念以及浏览器HTTPS的应用。算法

经过介绍,你会了解到:浏览器

  • 数据安全的基本概念
  • 加密算法
  • 数字证书和证书机构
  • ssl和openssl基本介绍
  • https应用

数据安全的基本概念

数据要在网络中传输,就会存在安全问题,由于任何人均可以得到你发送的数据包,从而得到你的数据,须要对数据进行加密,对于数据发送者,也可能被伪造,须要对双方身份作验证,另外,数据的完整性也须要考虑。安全

数据安全的问题

总结下安全的定义:微信

  • 保密性:只有本身和容许的人能看到或看懂数据;
  • 完整性:数据没有被破坏或篡改;
  • 可信任性:确保消息是对方发的,不是伪造者发的;

加密算法

加密是保证数据安全的经常使用手段,已经有不少现成的加密算法了,这些算法都是通过验证和考验的,想要破解很是困难,因此,通常不须要设计算法,能够直接使用,这里只会介绍常见算法的基本概念和特性,不涉及算法实现细节。网络

散列

散列就是hash算法,把任意长度的输入,经过散列算法,变换成固定长度的输出,该输出就是散列值,常见的hash算法有MD5和SHA。工具

MD5即Message-Digest Algorithm 5,称为信息-摘要算法5,主要用于确保信息传输的完整性,输入是不定长度信息,输出固定长度128比特的串。性能

SHA即Secure Hash Algorithm,称为安全哈希算法,和MD5同样,也是从MD4发展而来,与MD5的最大区别在于其摘要比MD5长32比特。网站

还有很重要的一点是,任意两个文档获得相同字符串的几率几乎等于0。加密

对称加密

加密就是把原始数据经过某种变换变成看不懂的东西,对于对称加密,这个操做是可逆的,另外,加密算法不能单独工做,必须有密钥配合,加密和解密的密钥是同一个,目前流行的对称加密算法有DES,AES。.net

DES即Data Encryption Standard,称为数据加密标准,是美国政府采纳IBM公司设计的方案做为非机密数据的正式数据加密标准,DES算法的入口参数有三个:Key、Data、Mode:

  • Key为8个字节,是DES算法的工做密钥;
  • Data也为8个字节,是要被加密或被解密的数据;
  • Mode为DES的工做方式:加密或解密;

如Mode为加密,用Key把Data进行加密,生成Data的密码形式(64位)做为DES的输出结果,如Mode为解密,用Key把密码形式的Data解密,还原为Data的明码形式(64位)做为DES的输出结果。

AES即Advanced Encryption Standard,称为高级加密标准,是下一代的加密算法标准,速度快,安全级别高,它可使用12八、192和256位密钥。

对称加密算法的优势是速度快,缺点是密钥管理不方便,要求共享密钥。

非对称加密

相对于对称加密,非对称加密和解密不是同一个密钥,一个称为公钥,另外一个称为私钥。公钥就是公开的,你们都知道,而私钥只有你本身知道。

用公钥加密的内容只能由相应的私钥来解密,反过来,用私钥加密的内容只能由相应的公钥来解密,经常使用的非对称加密算法有RSA、ECC。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操做,应用比较普遍。

非对称加密算法的优势是密钥管理很方便,缺点是速度慢。

数字签名

数字签名主要保证可信任性,不可伪造,所用的技术是前面介绍的散列和非对称加密。

首先为要签名的数据生成一个Hash字串hash1,而后用你的私钥加密获得encrypted(hash1),这就是数据的数字签名。当别人须要验证数据是不是你发送的时候,只须要用你的公钥解密你的签名获得hash1,并和数据计算出来的hash2对比,查看是否一致。

对于非对称加密和数字签名,若是以前没接触过,可能不太好理解,能够阅读相关文章进一步了解,在后面介绍https应用时,会说明其应用过程。

数字证书和证书机构

为了方便传递公钥秘钥,通常把它存储在数字证书中,为了保证证书的可信性,通常由专业证书机构颁发。

考虑这样一个场景,用户A想访问小米网mi.com,但因为手误,写成了ni.com,假设ni.com是不法分子仿照小米网建立的网站,包含一个伪造的数字证书,若是浏览器能够验证数字证书的真实性,就会提示用户证书异常,防止用户的损失。

CA就是证书的签发机构,负责签发证书、认证证书、管理已颁发证书的机关,制定了具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

要申请证书,应先向CA提出申请,在CA确认申请者的身份后,会分配一个公钥,而后将该公钥与申请者的身份信息绑在一块儿,使用CA的私钥进行签名,便造成证书发给申请者。

申请证书

若是想鉴别证书的真伪,用CA的公钥对证书上的签字进行验证,一旦验证经过,而且在有效期以内,该证书就被认为是有效的。

因此,配置ssl时,须要CA根证书的公钥,用于验证证书的真伪。

ssl和openssl基本介绍

ssl是保证数据安全传输的一个协议,openssl是一个工具,包含各类协议和算法的实现。

ssl

保证数据传输安全,比较简单的方法是用非对称加密,若是双方都认证了对方的数字证书么每次传输数据的时候都用对方的公钥加密,那么只有对方能解密,从而保证了信息的安全。可是对于平常应用(好比网页浏览)有两个问题:

  • 非对称加密速度很慢,并且消耗资源;
  • 不可能要求每一个用户都去申请数字证书,由于过程比较麻烦;

SSL(Secure Sockets Layer)经过握手协议和传输协议来解决上面的问题,它是一种间于传输层(好比TCP/IP)和应用层(好比HTTP)的协议,对数据进行加密和签名处理。

它由网景公司设计的,到了1999年,SSL由于应用普遍,已经成为互联网上的事实标准,IETF就在那年把SSL标准化,标准化以后的名称改成TLS(Transport Layer Security),中文叫作“传输层安全协议”,因此二者能够视做同一个东西的不一样阶段。

SSL的基本思想是用非对称加密来创建连接(握手阶段),用对称加密来传输数据(传输阶段)。这样既保证了密钥分发的安全,也保证了通讯的效率。

具体过程,介绍https应用时,会详细介绍。

openssl

openssl是一套开源工具集,主要包含3个组件:

  • openssl:多用途的命令行工具
  • libcrypto:加密算法库,实现了经常使用的加密算法;
  • libssl:加密模块应用库,实现了ssl及tls协议;

下面举几个实例来讲明它的使用。

1.使用MD5加密

使用MD5加密

2.生成随机数

生成随机数

3.对称加密

对称加密

4.生成秘钥对

生成秘钥对

https应用

HTTPS 协议,说白了就是HTTP协议和SSL/TLS协议的组合,能够把HTTPS大体理解为:HTTP over SSL。

Https在创建Socket链接以前,须要进行握手,单向认证和双向认证不一样。

具体过程网上不少,我就摘录一个 博友 的一个图,说明下双向认证的过程:

双向认证过程

下一篇就来讲说RabbitMQ的性能和安全考虑。

欢迎扫描下方二维码,关注个人我的微信公众号,查看更多文章 ~

情情说
相关文章
相关标签/搜索