让数据传输更安全

在阅读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加密

2.生成随机数

3.对称加密

4.生成秘钥对

https应用

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

Https在建立Socket连接之前,需要进行握手,单向认证和双向认证不同。

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

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

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

公众号:情情说

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏贾老师の博客

SSL/TLS协议

2774
来自专栏俞其荣的博客

HTTPS加密原理HeaderBodyFooterReferences

2837
来自专栏北京马哥教育

九个问题从入门到熟悉 HTTPS

Q1: 什么是 HTTPS? BS: HTTPS 是安全的 HTTP HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。...

35911
来自专栏IT笔记

支付宝支付密钥RSA1升级到RSA2

支付宝作为国内第一的第三方支付平台,安全的重要性不言而喻了,下面主要对密钥做一个简单的介绍和升级流程。

4943
来自专栏行者悟空

SSH免登陆原理及配置

1481
来自专栏吴伟祥

非对称加密与安全证书看这一篇就懂了 转

前几日做支付对接时,被对方文档中的加密方式搞晕乎了一会。意识到证书加密方面的理解不够深入,事后查阅参考资料补习一波。本文是根据期间的学习,以及长期以来的实践做出...

1592
来自专栏java一日一条

详解Https是如何确保安全的?

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单...

891
来自专栏Java技术栈

从入门到熟悉 HTTPS 的 9 个问题

HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议...

1064
来自专栏前端进阶之路

看图学HTTPS前言正文总结

之前说到HTTPS,在我的概念中就是更安全,需要服务器配置证书,但是到底什么是HTTPS,为什么会更安全,整套流程又是如何实现的,在脑子里没有具体的概念。所以,...

1114
来自专栏Timhbw博客

HTTPS知识普及

为什么需要https HTTPS是如何保障安全的  什么是TLS/SSL? 传输加密的流程  HTTPS是如何加密数据的 目录 为什么需要https ...

2866

扫码关注云+社区

领取腾讯云代金券