让数据传输更安全

在阅读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。

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,称为高级加密标准,是下一代的加密算法标准,速度快,安全级别高,它可以使用128、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的性能和安全考虑。

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


情情说