1.什么是OpenSSL
在电脑网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通讯,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。
OpenSSL由三部分组成:
1. openssl: 多用途的命令行工具;
2. libcrypto: 公共加密库;
3. libssl: 库,实现了ssl及tls;
2.常用加密算法和协议
2.1 对称加密算法
特性:
- 加密、解密使用同一个密钥
- 将原始数据分割成为固定大小的块,逐个进行加密
缺陷:
- 密钥过多
- 密钥分发困难
常用算法:
- DES、3DES、AES、Blowfish、Twofish等等
2.2 公钥加密算法
特性:
- 密钥分为公钥与私钥:
公钥:从私钥中提取产生;可以公开给所有人
私钥:通过工具提取,使用者自己留存,必须保证其私密性 - 特点:用公钥加密的数据,只能使用与之对应的私钥解密,反之亦然
- 用途:
数字签名:主要用于让接收方确认发送放的身份
密钥交换:发送发用对方公钥加密一段对称密钥,并发送给对方 - 算法:RSA, DSA, ELGamal
RSA:1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,RSA就是他们三人姓氏开头字母拼在一起组成的。
DSA:Digital Signature Algorithm 数字签名算法
2.3 单向加密
特性:定长输出、雪崩效应
- 雪崩效应指,其中以为发生变化,都会给结果带来翻天覆地的变化
功能:数据完整性
算法:
- md5:Message Digest 5, 128bits 消息摘要
- sha1:Secure Hash Algorithm 1, 160bits 安装的hash算法
- sha224、sha256、sha384、sha512(都为sha家族,224长度为224位,其他意义相同)
2.4 密钥交换
公钥加密:通过获取对方的公钥对数据进行加密,只有对方的私钥才能解密
DH算法(Deffie-Hellman):由两个人名组成
3 公钥加密解密过程图解
4 OpenSSL命令
openssl:默认在Centos 7上面默认安装,可以直接使用,有很多子命令可以分别管理。
子命令分为三类:
- 标准命令
- 信息摘要命令(dgst命令)
- 加密命令(enc子命令)
标准命令:enc,ca,req,genrsa等等
4.1 对称加密
工具:openssl enc
支持的算法:3des,aes,blowfish,towfish
enc命令:
加密:# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
4.2 单向加密
工具:openssl dgst,md5sum,sha1sum,sha224sum等等
dgst命令:
openssl dgst -md5 /PATH/TO/SOMEFILE
[root@localhost tmp]# openssl dgst -md5 1.txt
MD5(1.txt)= e82ee1c57c41099c988f32776cee6dfc
[root@localhost tmp]# md5sum 1.txt
e82ee1c57c41099c988f32776cee6dfc 1.txt
4.3 生成用户密码
工具:passwd,openssl passwd
openssl passwd -1 -salt $(openssl rand -hex 10)
Password:
$1$0d9d2f2e$Ty3KtAwkijG5zIU08ixay.
4.4 生成随机数
工具:openssl rand
openssl rand -hex |-base NUM
openssl rand -hex 10
6d989f629da63bb40948
openssl rand -base64 10
3JXUSebo5uMlfw==
注意复制base64的随机数时,不要复制后门的“==”号
5 公钥加密
加密算法:RSA, ELGamal
工具:gpg, openssl rsautl
数字签名算法:RSA, DSA, ELGamal
密钥交换算法:dh
DSA: Digital Signature Algorithm 数字签名算法,也可叫DSS
DSS:Digital Signature Standard
RSA:
生成密钥对儿:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa -out key.pri 2048)
放在括号中,在子SHELL中执行,不影响当前SHELL。
创建时即修改权限
提取出公钥:
openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
随机数生成器:
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;