加密、解密详解及CA的实现 推荐

转载nmshuishui的文章,文章链接 http://blog.51cto.com/nmshuishui/1370917?utm_source=tuicool&utm_medium=referral

一、前言

进入21世纪,人们的生活已经严重依赖于互联网,衣、食、住、行,互联网已经渗透到生活的第一个角落,这也给某些不良网民们提供了一个绝佳的环境去窃取我们的信息,让我们的信息不再安全。为了应对这些hacker和script boys,我们的白帽们也一直在努力,从没松懈过。

因为我还距白帽的能力有些差距,所以这里就简单介绍一下互联网的加密、解密方式、openssl的基本应用及CA的实现过程。

二、加密方式

1、对称加密

对称加密是基于加密算法+口令的,它主要有两个特性:

1)、加密方、解密方使用同一个口令

2)、将原文分割成固定大小的块,对这些块进行加密

在加密数据时,由于逐字符加密速度实在是太慢了,所以就选择了对其按块进行加密,而且在加密时通常把第一个块加密以后,再把第二个块加密,将第一个块加密后的结果与第二个块加密之后的结果做异或运算,然后再做为第二个块的输出,前后块形成了块链。所以如果想要看第一块的内容,必须拿到前一个块做异或运算,才能得到结果。

对于一些大的购物网站来说,它需要保存每个用户的密钥,这就造成了一定的麻烦。而且在数据传输的过程中是很容易被窃取并篡改,然后进行字典攻击,无法保证用户身份认证和数据的完整性的。

一些对称加密算法:

DES:通用加密标准,56bits密钥

3DES(triple):进行3轮EDS,

AES:高级加密标准,128bits密钥

Blowfish,Twofish,IDEA,RC6,CAST5,Serpent

2、非对称加密

非对称加密会在本地生成一对密钥对儿:公钥和私钥。公钥任何人都可以拥有,但私钥只有自己拥有,既然有了私钥,那就可以实现身份认证了。

非对称加密的特性

1)、密钥交换

2)、身份认证

公钥证书,通常简称为证书,是一种数字签名的声明,它将公钥的值绑定到持有对应私钥的个人、设备或服务的标识。证书的主要好处之一是主机不必再为单个使用者维护一套密码,这些单个使用者进行访问的先决条件是需要通过身份验证。相反,主机只需在证书颁发者中建立信任。大多数普通用途的证书基于 X.509 v3 证书标准。

所以,对于服务器而言,在与用户进行交互的过程中,需要时直接管用户要其公钥就可以了,只有其对应的私钥才能解密,再也不需要记录那么多的密钥了。在密钥交换的过程中,依然存在密钥被截取、伪造。

另外,就算法本身的实现来讲,公钥加密技术比对称加密技术的速度慢上差不多3个数量级,一个数量级就是10倍,所以3个数量级不是30倍,而是1000倍。因此,在加密数据时是很少用到公钥去加密的。同样的,私钥加密也会很慢。

一些非对称加密算法:

RSA,EIGamal,ESA

3、单向加密

单向加密是提取数据的特征码,保证了数据的完整性

特性:

1)、one-way:单向的

2)、collision-free

3)、数据完整性

就好比我们在互联网上下载东西一样,好多网站都会提供一个MD5码,我们把下载下来的数据做一个MD5运算就会得到一个特征码,只要这个特征码与网站提供的一样,那么就说明这个数据没有被修改过,那如果二都不一致,那肯定就是被修改过了的。这也就是传说中的单向性和雪崩效应,微小的改变会导致结果的巨大变化。

一些单向加密算法:

MD5:128bits

sha1:160bits

sha512:512bits

三、加密方式详解

就上面三种加密方式而言,单单使用哪一种都不能保证数据的完整性和身份认证。尤其在当今互联网上的信息传输一定得保证私密性、身份认证和数据完整性。

下面用一张图来详解一下当今互联网加密、解密的流程:

Bob传送数据给Alice

解释:

加密过程:

1)、使用单向加密技术加密数据,生成一个特征码。保证了数据的完整性。

2)、用Bob的私钥对生成的特征码进行加密。只有Bob有其私钥,保证了身份认证。

3)、对数据和加密过的特征码进行对称加密。

4)、用Alice的公钥加密上一步得到的对称加密密码。

解密过程:

1)、使用Alice的私钥先解密对称加密密码。

2)、用得到的对称加密密码去解密加密了的数据和特征码。

3)、使用单向加密算法加密上一步解密出来的数据。

4)、使用Bob的公钥去解密特征码,得到在Bob发送数据的特征码。

5)、比较3,4步中的特征码是否一致。

存在问题:

虽然用了这么多步加密算法去加密整个过程,但在数据的传输过程中还是存在漏洞的。因为Bob和Alice的公钥依然会在网上传输,所以这两个公钥仍然有可能被窃取、掉包。这个过程还是不完美的,这就需要一个权威的第三方认证机构CA来给他们发证。

四、openssl的基本应用

SSL是Secure Socket Layer(安全套接层)的缩写,可以在Internet上提供秘密性传输。OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。openssl是一个多功能命令工具,可生成密钥、创建数字证书、手动加密解密数据。这里先介绍openssl的基本使用,接着就使用openssl去创建CA。想要查看openssl的命令,可以使用openssl ?。

1、标准命令:

enc,dgst,genrsa,rsautl,req,ca,rsa,passwd

2、opensll提供的算法

1)、对称加密算法

DES 3DES AES Blowfish Twofish IDEA RC6 CAST5 Serpent

2)、非对称加密算法

DHA RSA EIGamal DSA

3)、信息摘要算法

MD5 SHA1 SHA512 CRC-32

4)、密钥和证书管理

密钥和证书管理是PKI(Public Key Infrastucture)的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。在此基础上,OpenSSL实现了对证书的X.509标准编解码、并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。

3、使用openssl加密、解密数据

1)加密/etc/passwd,放到当前目录下并命名为passwd.openssl。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

[root@nmshuishui ~]# openssl enc -des3 -a -salt -in /etc/passwd -out ./passwd.openssl

enter des-ede3-cbc encryption password:

Verifying - enter des-ede3-cbc encryption password:

[root@nmshuishui ~]# ls

anaconda-ks.cfg  install.log  install.log.syslog  myiso  passwd.openssl  scripts  soft  tmp

[root@nmshuishui ~]# cat passwd.openssl

U2FsdGVkX1+oXyyFLQ034Ff6lvhFeFiYXi+2THWrHl1T5JRKq6Mvy645SpvsCVmf

+JCQxLdJnvGAu3YaQmIYy6biuxRR6e9TKZWt34kd5IJ7BPL71NMj/nAbCkfdju7/

R479XedQRIsU2iEQJtgUbJPS08K/gdkUlfXTBxLfOkIpxAtC/HZWcPJvIMWno6+g

WnH3eh0YJymWIz9BlxzOWFyddGZZyWU3l5Qn3kOEd+2Wl/iqAbPzEMxz/wLnxCpt

8pW2P7sDwixtgDPPxHnlRtfxd8+ETcit5+svAPTTt4NXLjt8ZYqK2xf+Uo20liTU

nYWL9S7dH0F+4hV5N0aFmySi5Lu0M5jIe96e5dctA8WiG02L0Hi9nl3JbbXF/Fl7

Ns2eC/MdqC5P362/um0BxLwamJGcTqDWTB3ltOpjbqTB2x9+lLjxtnGKE3ZTUSjI

EWCbrke/YErHnuQ35W3VmNqskCbNWs2FV1aiPraDa8C0uyElx5r5KYu2JxlSCyes

edXDdstk8OZKHTiKJqO2HknPMPdBZpAXbNKnM/uKmmGOVvpJTmLzAvDACInJeNAN

GZ1lhP7jvNb7/+A8tLhN5Cmnz/VK7NDppUeoxOU9ZfjSMOinTObl8R4iV738EaAw

pZooSxGocYA342uN9dCedrbFr7Sk3APP6MAMYXeSvPThgXPQIP9IV9hnDVEhXzqe

RNtuOnYUGhMql8wrlrmhGM7ye1LztTiVPHhtNSfxpxinqlGx9PEqy+UdNjgoKF2B

2oBX8UzFvn85I8edaKe3LUhb22FoLbAlaiPcCoFUgJb7zYfR3RF6WcOaaNy1jLc8

3a59Jnrf1jYgT+NQl1S5jCmQHyRtEGNdi517PlgkDSeCLbFtssZvlPcxD2rBS3HX

1R0HDmJME9dUq1NzY/I4PfLbjLnIHUTsuage2PWfHxjuLmi14fUi8QotEy8qJcpo

LmkS3ds1t/r9gTTldgcB/PmLKTtLNRNGQXAemMMxsVVTMrqwBcao7wtIy+y5d6bk

kuonPLfmhEViSnlDq4WU7CZoSVZp+0d5VNL+y0kFExTcPLIZFOtHYUwHMzdup16L

YIobul9+ZFG0GnMAZ/dqHGRwUSdswb7+RukJyzR2mCbCwhh0sWuHL5CHeO7UH5pT

XyOAkuJHfx8W8s8mIrm1FN7LmpCnePZOM+sEBCbx7aibIvufn53uFT6u9vvYBxLT

aDPX+7H4rSx08nvx3IOxLku0aCU/nV/hKwNqR9ycWBD/avDm+d0RRarD3KDUwmM2

tRTbUwSslVR5MeXJNOr+TpSQEracAmY5OboXF6g9108kbGyKdhxgJ5nPpc6m7/sh

0WnJpwfqfa+bjkJzGKcTHpbmoU2dJGuS+tMCwWj3b6sAwJIGYgJXD5VLfmTBXdfI

uyDcqJhqQfoxw92gqSrH4GtbxC8RVImA7Ogmv57KNIMjAcPODwsPz+8pQwGOAE8E

eLAFnE79VzWeqc2Xi/J6glAy9TTuOnRDhA1wP1XV60iNUzlOxRuzzZaPRlQR6yIb

CWuH6Lid5i6vNIzT1J1pQwYhf/A/dZdtB8S5/B2cFNdzG+0rtQWdFGmhq6mb8V3R

wEpaVwIsxDn6TYoFmSgr3FAWin6MA8jAcewG4UYAKYtBZ2zovj0erOcoNfzd8TC6

dNhid3dw9EnskeHPdJoE7pNGfAFKE5vCplG5/ooM3Ex+mYUiJRaf0w==

这个时候查看passwd.openssl就不再是用户信息了,而是一堆加密过的序列。

2)passwd.openssl的解密,解密为openssl.out

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[root@nmshuishui ~]# openssl enc -d -des3 -a -salt -in ./passwd.openssl -out passwd.out

enter des-ede3-cbc decryption password:

[root@nmshuishui ~]# ls

anaconda-ks.cfg  install.log  install.log.syslog  myiso  passwd.openssl  passwd.out  scripts  soft  tmp

[root@nmshuishui ~]# cat passwd.out

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

解密后再查看,就是原文件的内容了。

五、使用openssl实现私有CA

1、自建CA

要使用openssl创建么有CA,首先还是看一下openssl的配置文件中关于CA的描述吧。配置文件在/etc/pki/tls/openssl.cnf,这里面主要定义了证书的存放路径、密钥的存放路径、和其它一些证书相关的说明。

CA做为一个第三方的权威认证机构,专门是给别人发证的,要使别人信任它,需它自己有证,但现在它是一个根,所以他首先要自签证书来证明自己的合法性,然后才能给别人颁发证书,而证书需要密钥,所以首先要生成密钥对儿。

1)生成密钥对儿

公钥是人人都可以用的,但是私钥一定得自己保存,不能让别人查看,所以当我们创建私钥时,要让其的权限为600,并放在子shell中去执行。这里我们仅生成私钥即可,不需生成公钥,因为私钥很长,公钥是从私钥中按某种格式提取出来的。

1

2

3

4

5

6

7

8

9

10

11

12

[root@nmshuishui CA]# pwd

/etc/pki/CA

[root@nmshuishui CA]# ls

certs  crl  newcerts  private

[root@nmshuishui CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

.............................................................+++

.....+++

e is 65537 (0x10001)

[root@nmshuishui CA]# ls -l private/cakey.pem

-rw-------. 1 root root 1679 Mar  8 11:07 private/cakey.pem

[root@nmshuishui CA]#

如果想要查看公钥可以使用-pubout把公钥提取出来再用-text以文本格式显示:openssl rsa -in private/cakey.pem -pubout -text(非必要步骤)

上图中夹在BEGIN PUBLIC KEY和END PUBLIC KEY中间的就是公钥信息,再上面的一些就是私钥信息了。

2)生成自签证书

3)创建需要的文件

1

2

[root@nmshuishui CA]# touch index.txt serial crlnumber

[root@nmshuishui CA]# echo 01 > serial

2、用openssl实现证书申请

1)在主机上生成密钥,保存到应用此证书的服务的配置文件目录下 ,这里应用服务器是httpd。

1

2

3

4

5

6

7

8

[root@localhost ~]# mkdir /etc/httpd/ssl

[root@localhost ~]# cd /etc/httpd/ssl/

[root@localhost ssl]# (umask 077;openssl genrsa -out httpd.key 1024)

Generating RSA private key, 1024 bit long modulus

..................++++++

.......++++++

e is 65537 (0x10001)

[root@localhost ssl]#

2)生成证书签署请求

生成的.csr(cetificate signature request)是证书签署请求。

3)将请求文件发送CA

3、CA签署证书

1)、签署

2)、将证书传回请求者

3)、返回客户端验证查看

4、吊销证书

吊销后,会把吊销的证书放到吊销列表中。

加密、解密详解及CA的实现相关推荐

  1. C#高级--加密解密详解

    C#高级–加密解密详解 零.文章目录 一.名词介绍 1.加密 是以某种特殊的算法改变原有的信息数据,以另外一种形式呈现,这里有几个名词:加密之前的信息数据可以理解为原数据,原文:加密之后的数据信息可以 ...

  2. Go-ecc加密解密详解与代码

    目录 Ecc概述 历史 密钥对生成 加密算法 解密算法 小结 Ecc的Go实现 crypto/ecdsa 包 crypto/elliptic 包 crypto/rand 包 crypto/x509包 ...

  3. php中文加密解密,php加密解密详解

    不知道大家对于php加密解密有多少了解,本文主要和大家分享php加密解密相关知识,希望能帮助到大家. 一 对称加密 1.mycyrpt的对称加密:/** * @param $key //数据加密密钥 ...

  4. php 易语言md5加密解密,详解易语言调用js实现md5加密方法

    易语言调用js需要用到拓展组件的脚本组件, 在窗口创建完毕的事件里给脚本组件初始化设置下脚本组件的语言属性,在这里以JScript为例: 脚本组件执行脚本的简单方法是:  脚本组件1.执行 ()  然 ...

  5. C#实现RSA加密和解密详解

    C#实现RSA加密和解密详解 原文:C#实现RSA加密和解密详解 RSA加密解密源码: using System; using System.Collections.Generic; using Sy ...

  6. JavaScript实现加密与解密详解

    这篇文章介绍了Java脚本语言实现加密与解密详解的方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 目前原生射流研究-貌似并没有提供讯息摘要5计算相 ...

  7. TLS/SSL加解密详解(一)

    TLS/SSL加解密详解(一) 本章节主要介绍TLS/SSL的历史 TLS/SSL的来源 SSL(Secure Socket Layer)安全套接层协议 最初由网景公司(Netscape)研发,后被I ...

  8. HTTPS加密过程详解

    HTTPS加密过程详解 一.前言 二.HTTPS的混合加密 1.摘要算法 2.混合加密和数字证书 三.补充 四.参考资料 一.前言 http是为了解决http存在的问题而在http基础上加入了SSL/ ...

  9. HTTPS 加密过程详解

    HTTPS 加密过程详解 HTTPS 中的概念 对比 HTTP 与 HTTPS 网络分层结构 对称加密 非对称加密 HTTPS 中的概念 明文:可以直接看到原始数据的文本: 密文:看不见原始数据的文本 ...

最新文章

  1. Iptables防火墙详细介绍与实战增强服务器安全
  2. 计算机用户账户添加,windows添加用户账户
  3. maven之setting.xml的配置详解
  4. csdn编辑器模板2
  5. 【Vegas原创】分别用Toad、EM解表锁
  6. 使用element ui 日期选择器获取值后的格式问题
  7. 使用jquery的blockui插件显示弹出层
  8. c++语言偶数分离,在C++的链表中分离偶数和奇数节点
  9. ubuntu15.04安装wps-office的64位版
  10. 关于WEB前端开发的工具
  11. php实现最后登录时间,php实例之基于Cookie的登录表单和获取最后登录时间
  12. 高德h5地图api接口_在uniapp h5中在线引入高德地图js api的方法分享
  13. 安装debian文件管理器
  14. 超好用的文件转换神器!拿走不谢~
  15. 开篇记(好记性不如烂笔头)
  16. 用python写一个纪念日计算工具!有对象的特别注意了!
  17. oracle+sql+按中文拼音排序,Oracle 中文字段进行排序的sql语句
  18. [Kudu基础]--Kudu+Impala介绍 | 微店数据科学团队博客
  19. Oracle EBS 定义值集的段值与快码的公用查看
  20. UBUNTU 20.04服务器安装桌面 xfce4 + xrdp

热门文章

  1. 公链分析报告(2)--EOS
  2. Exynos_4412——ADC实验
  3. jquery 输入框失去焦点时 (blur)事件
  4. 输入框事件监听(三):blur与change的差异
  5. SemanticKITTI点云拼接+PCL可视化
  6. 指纹锁—AS608指纹模块
  7. MTK MT6169 2G用户指南参考资料
  8. Git Bash Here常用命令以及使用步骤
  9. 秒懂流媒体协议 RTMP 与 RTSP
  10. 力扣今日打卡数独解答