OpenSSL
概念
加密算法
- 对称加密(使用相同的密码进行加密解密)
对称加密是指双方对约定一个相同的密码,通过这个密码对文件或信息进行加密解密
常见加密算法:DES、3DES、IDEA等
- 非对称加密(使用不相同的密码进行加密解密)
非对称加密是通过生成密钥对(公钥/私钥),通过私钥对文件进行加密,可以使用公钥进行解密;通过使用公钥进行加密,只能使用私钥进行解密。一般私钥是私有的,公钥是公开的,一旦私钥泄露对安全的影响极大
常见加密算法:RSA、ECC等
摘要算法
MD5是摘要算法,不是加密算法
消息摘要算法是指对信息、文件等数据进行计算,得到一定长度的摘要;比如我在网上下载了某个文件,我想确认文件是不是完整的,或者有没有被人修改的,只需要将文件下载到本地使用支持的相关算法进行摘要运算得出摘要信息,与发布者公示的摘要信息进行比较确认是否一致,如果一致则文件没有被修改也未损坏,如果不一样说明文件并不是原来的文件
消息摘要算法有如下几类:
消息摘要
生成的消息摘要都是128位的包括:MD5、MD4、MD2,MD5相对4、2安全性最高,至今未被破解;通过MD5算法是不可逆的,无法通过加密后的信息破解出原始数据。但是MD5不足之处就是可以通过穷举进行推举出明文,因为相同的信息用MD5进行摘要运算后的信息都是一样的。在使用MD5摘要算法对密码进行加密时,应使用复杂密码
安全散列
SHA1、SHA256、SHA384、SHA512
数字签名
数字签名的三个特征:
- 不可否认
- 报文的完整性
- 报文鉴别
数字签名是指对文件进行摘要运算得出摘要信息,通过使用私钥对摘要进行加密的过程称之为数字签名的过程,而通过加密摘要信息称之为该文件的数字签名
证书颁发机构
CA机构
CA机构全称为Certificate Authority证书认证中心,CA是否则签发证书、认证证书、管理已颁发的证书的机关。先前说的私钥公钥,每个人都可以去生成一对密钥对,而我们怎么确定这个密钥对一定是某某的呢?这时候我们就需要把我们的公钥以及相关信息发送给权威的CA机构,通过CA机构来鉴别
而CA机构的证书在安装好操作系统时就已经被内置在系统中
生成密钥对
生成密钥对(公私钥)
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
34[root@xiaowangc media]# openssl genrsa -out ca-key.pem 2048 # 生成2048位的私钥
Generating RSA private key, 2048 bit long modulus (2 primes)
......................................+++++
....................................................................................................................+++++
e is 65537 (0x010001)
[root@xiaowangc media]# cat ca-key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2CjcI+aU1cwHczvbMJglT/QstPJzKwwRqftmUTm4UjWJCBap
MSjWS+9EfkoqqkwUodjy6d1KyOqlXKnsa6JuinkbL0S2iFnh0RN19EIoqne+a1Y5
3KhrV0J765bl71ugdU87G5WxgnXrQeZcHINeEUkkMTfAL//FWnZlZdJ2JMUrc6Og
CX+NzX4ITLNZagILWIC3IofGkxLGLRestN4Lveh4S7bLZHQekqsxLgRG0tWIGa3b
V50gFbRdeFWYP82Z59AK6t62/fcSefSqwCRBnHOkTKkGom13umV/vIkW8rdexVZE
tCYvZmbN4qNJ5GGSjiBWHj8qtDqnw8Bjz3zF4QIDAQABAoIBAF68kbb+UQ7ezAka
G7fRhtDi8FEhzY35TSiVsUM6K+mD4xnzbJXKExnWtMsw0EAw9f31KomK3kLubCkP
pDmMSCxSZbKyx9k8o3bRs6mo8U+9CWzbrqJiAiGNVuhrCz17h/jCD+LIGbNW4RPR
1V79yFWFG+KiT4356FH8f/Y/Zl44ad6OVVGr66tgpAv2fOUNiInOcKpi+AmSl4lj
3Us/Sc+ZqgaLkdWFWvQM+RtjFvDt9E7GHrHieh+CnTmKj9CRzHBDTut/36WdTqlS
JnyBQsTUD4T2yTgTlr0ewhRcITXrUY2od0cm+dpr33UCE8nDMMGAWvGCL6ZD0CHr
w4Rk9hECgYEA6/yGJBrt8TTB9RTQTaflD1YB6nF1NMwJ1M2SQz5w6uhOnfvigpIj
lBAp3JfpgnYcjxUoXPanrSk04UwtM5llmDMj8wg66XtSmm8iT0uL4PbrZUxONjKo
4BYud0rIWFMrZilc0EIm0nywsfK3L+lhtM+/+1uVCGgDfW8YIgT+wg0CgYEA6n3g
zGwxAPN/wAD4i2/hc3tQ+Z9LgAcFy7MAxEzOv62Gcbge3NohHwTPTm7wuQr53TZg
GcNV+T0UiOhKEjcSccqiq8IHsfl+dCaWJQdPSnG5XrHd2zRSYuzihVQLgiHWSkJG
06U8BdmXN/7Yp99TX60O2ADNivSrr8rHRzw5IiUCgYEArbTvRMpx1bhhATd18YOh
z70eoeUsQlXi8rrza/4dfjzMCeysmjJacBXJyrAj2b15XjVTxcJmQMdxPlold7L1
nqgeUToAq3b0oesmVTol183KDoGxnKGDv5d0UqlAeguWiZfu0vmuvAe+xO4FvAXN
vxuhlLOgK1TtJLrPB9Ond00CgYEA4xTn389eXVdxfZTzHMVKBTWEo1g6G0+xsyQ0
N+VRypnWusXdTW8H6CwWPhR9lhUlB66ivhBGb8lQ24xoPt+KQxxDECYkoZvFc+Hy
QQWlKaicJTIGcUNoDVjtvMQ5KNpv1RX91PQM/nVLVfS8B0XkTaEf4NpWMpzirqim
9ztA8OkCgYBr/MLkp/6EvoeUhH1SwCal2DThXhbIuTOoVjl1lQhLqdyJlKnKPAN2
mTcwzk779JQhIvbFS8iZ4iYu6mBJGStnMzl+ZHWhRgHohT4M960ToikTsNOwbMon
CCg+8ntFycNc0ml0BBQ5B37AN72iX0Fwair93PdDyH46PRIuiIZ8zg==
-----END RSA PRIVATE KEY-----
[root@xiaowangc media]#通过私钥提取出公钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14[root@xiaowangc media]# openssl rsa -in ca-key.pem -pubout -out ca-pub.pem
writing RSA key
[root@xiaowangc media]# ls
ca-key.pem ca-pub.pem
[root@xiaowangc media]# cat ca-pub.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2CjcI+aU1cwHczvbMJgl
T/QstPJzKwwRqftmUTm4UjWJCBapMSjWS+9EfkoqqkwUodjy6d1KyOqlXKnsa6Ju
inkbL0S2iFnh0RN19EIoqne+a1Y53KhrV0J765bl71ugdU87G5WxgnXrQeZcHINe
EUkkMTfAL//FWnZlZdJ2JMUrc6OgCX+NzX4ITLNZagILWIC3IofGkxLGLRestN4L
veh4S7bLZHQekqsxLgRG0tWIGa3bV50gFbRdeFWYP82Z59AK6t62/fcSefSqwCRB
nHOkTKkGom13umV/vIkW8rdexVZEtCYvZmbN4qNJ5GGSjiBWHj8qtDqnw8Bjz3zF
4QIDAQAB
-----END PUBLIC KEY-----
生成摘要
对字符串生成摘要
MD5
1
2
3[root@xiaowangc media]# echo 123456 | openssl md5
(stdin)= f447b20a7fcbf53a5d5be013ea0b15af
[root@xiaowangc media]#Sha
1
2
3
4
5[root@xiaowangc media]# echo 123456 | openssl sha1
(stdin)= c4f9375f9834b4e7f0a528cc65c055702bf5f24a
[root@xiaowangc media]# echo 123456 | openssl sha256
(stdin)= e150a1ec81e8e93e1eae2c3a77e66ec6dbd6a3b460f89c1d08aecf422ee401a0
[root@xiaowangc media]#
对文件生成摘要
MD5
更改文件名MD5值不变,当内容发生改变后MD5值才会产生变化
1
2
3[root@xiaowangc media]# echo xiaowangc > 1.txt
[root@xiaowangc media]# openssl dgst -md5 1.txt
MD5(1.txt)= 117d8e3d36b77fd390ee6f0304257ec1验证更改文件数据后的MD5值
1
2
3root@xiaowangc media]# echo 12345678 > 1.txt
[root@xiaowangc media]# openssl dgst -md5 1.txt
MD5(1.txt)= 23cdc18507b52418db7740cbb5543e54Sha256
1
2[root@xiaowangc media]# openssl dgst -sha256 1.txt
SHA256(1.txt)= e7e213f38f47bbaec6aef3307831c1ce60a932e2c380a19e00d191927122a9f4
生成数字签名
通过上面的命令已经了解到了如何生成密钥对以及提取摘要信息,下面我们开始试着对文件进行数字签名
1 | 对文件进行摘要运算 |
生成证书
1 | 创建CA |