openssl 常用命令
openssl version 查看版本
openssl help 查看帮助命令
查看enc 命令
symmetric cipher routines
whatis enc
man enc
enc命令:
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
生产公钥和秘钥
openssl genrsa -out rsakeyprivate 2048
openssl ras -in rsakey.private -pubout
httpd ssl的 证书生产与配置
cd /etc/pki/CA/certs/ #没有文件夹 就创建
1.服务器端
创建私钥 cakey.pem
(umask 077;openssl genrsa -out private/cakey.pem 2048)
touch index.txt
echo 01 > serial
创建自签证书 cacert.pem
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
填入下面数据 :
CN
wuhu
wuhu
uxun
uxun
ca.uxun.com
1228857713@qq.com
去客户端 (安装有apache的服务器)
cd /home/appuser/tool/apache24/ssl (这台服务器是这样的)
生产httpd.key
(umask 077; openssl genrsa -out httpd.key 1024)
生成 httpd.csr
openssl req -new -key httpd.key -out httpd.csr
填入下面数据 :
CN
wuhu
wuhu
uxun
uxun
ca.uxun.com
1228857713@qq.com
回车
回车
将 httpd.csr 复制到 服务器端
scp httpdcsr root@170.101.101.9:/tmp
3. 到服务器端 签署证书
加解密的原理
我们一般的加密是用一个密码加密文件,然后解密也用同样的密码.这很好理解,这个是对称加密.而有些加密时,加密用的一个密码,而解密用另外一组密码,这个叫非对称加密,意思就是加密解密的密码不一样.初次接触的人恐怕无论如何都理解不了.其实这是数学上的一个素数积求因子的原理的应用,如果你一定要搞懂,百度有大把大把的资料可以看,其结果就是用这一组密钥中的一个来加密数据,可以用另一个解开.是的没错,公钥和私钥都可以用来加密数据,相反用另一个解开,公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名.
openssl 常用命令
基本概念
信息摘要算法和数字签名
1.对要签名的原始文件file做信息摘要操作得到摘要信息 Mf
2.使用私钥对Mf进行加密得到 Sf
3.Sf 就是原始文件的签名信息,可以和文件一起 保存或者发送给接送人
对数字签名的验证流程如下:
- 验证者接收到file和Sf 后,首先对文件file采用相同的信息摘要算法得到摘要信息 Mf
2.使用公钥对S F 解密得到 Mf2
3.比较 Mf 和 MF2 ,如果相同,则验证成功,证书文件 File 没有更改,并且数字签名SF 有效。
使用信息摘要指令进行数字签名和验证
1.生成一个rsa秘钥
openssl genrsa -out rsaprivatekey.pem -passout pass:111111 -des3 1024
2.从私钥中导出一个相应的rsa公钥并保存
openssl rsa -in rsaprivatekey.pem -passin pass:111111 -out rsapublickey.pem -pubout
3.信息摘要和私钥加密操作
openssl dgst -sha1 -sign rsaprivatekey.pem -out sgn.txt openssl.txt
验证rsa 数字签名
openssl dgst -sha1 -verify rsapublickey.pem -signature sgn.txt openssl.txt
OpenSSL:
NIST:
保密性:
数据保密性
隐私性
完整性:
数据完整性
系统完整性
可用性
安全攻击:
被动攻击:窃听
主动攻击:伪装、重放、消息篡改、拒绝服务
安全机制:
加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
认证
访问控制
数据保密性
连接保密性
无连接保密性
选择域保密性
流量保密性
数据完整性
不可否认性
密码算法和协议:
对称加密
公钥加密
单向加密
认证协议
Linux系统:OpenSSL, gpg(pgp)
加密算法和协议:
对称加密:加密和解密使用同一个密钥;
DES:Data Encryption Standard
3DES:
AES:Advanced (128bits, 192bits, 258, 384, 512bits)
Blowfish
Twofish
IDEA
RC6
CAST5
特性:
1、加密、解密使用同一个密钥;
2、将原始数据分割成固定大小的块,逐个进行加密;
缺陷:
1、密钥过多;
2、密钥分发;
公钥加密:密钥是成对儿出现
公钥:公开给所有人;pubkey
私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
数字签名:主要在于让接收方确认发送方身份;
密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;
数据加密:
算法:RSA, DSA, ELGamal
单向加密:只能解密,不能解密;提取数据指纹;
特性:定长输出、雪崩效应;
算法:
md5: 128bits
sha1: 160bits
sha224
sha256
sha384
sha512
功能:
完整性;
密钥交换:IKE
公钥加密:
DH (Deffie-Hellman)
A: p, g
B: p, g
A: x
--> p^x%g
p^y%g^x = p^xy%g
B: y
--> p^y%g
p^x%g^y = p^xy%g
PKI: Public Key Infrastructure
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库
X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者惟一标识
主体的惟一标识
扩展
发行者签名
SSL: Secure Socket Layer
TLS: Transport Layer Security
1995:SSL 2.0, Netscape
1996: SSL 3.0
1999: TLS 1.0
2006: TLS 1.1 RFC 4346
2008:TLS 1.2
2015: TLS 1.3
分层设计:
1、最低层:基础算法原语的实现,aes, rsa, md5
2、向上一层:各种算法的实现
3、再向上一层:组合算法实现的半成品
4、用各种组件拼装而成的种种成品密码学协议/软件:
tls, ssh,
OpenSSL:开源项目
三个组件:
openssl: 多用途的命令行工具;
libcrypto: 公共加密库;
libssl: 库,实现了ssl及tls;
openssl命令:
openssl version:程序版本号
标准命令、消息摘要命令、加密命令
标准命令:
enc, ca, req, ...
对称加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令:
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
-des3
openssl ?
单向加密:
工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst
dgst命令:
openssl dgst -md5 /PATH/TO/SOMEFILE
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:
CBC-MAC
HMAC:使用md5或sha1算法
生成用户密码:
passwd命令
openssl passwd -1 -salt SALT
生成随机数:
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;
公钥加密:
加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
生成密钥对儿:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
# (umask 077; openssl genrsa -out key.pri 2048)
提取出公钥:
# openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
随机数生成器:
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;
OpenSSL:
三个组件:
openssl: 多用途的命令行工具;
libcrypto: 加密解密库;
libssl:ssl协议的实现;
PKI:Public Key Infrastructure
CA
RA
CRL
证书存取库
建立私有CA:
OpenCA
openssl
证书申请及签署步骤:
1、生成申请请求;
2、RA核验;
3、CA签署;
4、获取证书;
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
(1) 创建所需要的文件
# touch index.txt
# echo 01 > serial
#
(2) CA自签证书
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.epm -days 7300 -out /etc/pki/CA/cacert.pem
-new: 生成新证书签署请求;
-x509: 专用于CA生成自签证书;
-key: 生成请求时用到的私钥文件;
-days n:证书的有效期限;
-out /PATH/TO/SOMECERTFILE: 证书的保存路径;
(3) 发证
(a) 用到证书的主机生成证书请求;
# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
(b) 把请求文件传输给CA;
(c) CA签署证书,并将证书发还给请求者;
# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial
(4) 吊销证书
(a) 客户端获取要吊销的证书的serial
# openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
(b) CA
先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;
吊销证书:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
(c) 生成吊销证书的编号(第一次吊销一个证书)
# echo 01 > /etc/pki/CA/crlnumber
(d) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
博客作业:加密解密基础、PKI及SSL、创建私有CA;