版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
对称加密算法:
对称加密:加密和解密使用同一个密钥
DES:data encryption standard ,56bit,7位
3DES
AES:advanced encryption standard (128,256,512bit)
Blowfish,Twofish:商业
IDEA,RC6,CAST5
特性:加密解密使用同一密钥,效率高
将原始数据分割成固定大小的块,逐个进行加密
缺陷:
密钥过多,每个人都使用不同密钥
密钥分发,哪个密钥分给哪个人
数据来源无法确认
非对称加密算法
公钥加密:密钥是成对出现
公钥:公开给所有人,public key
私钥:只有自己拥有,必须要保证私钥的秘密性,private key
特点:用公钥加密数据,只能使用与之配对的私钥解密,反之亦然
功能:
数字签名:主要在于让接收方确认发送方身份
对称密钥交换:发送方用对方的公钥加加密一个对称密钥后发送给对方
数据加密:适合加密较小数据
缺点:密钥过长,加密解密效率低下
算法:
rsa:数据加 密,数字签名
dsa:数字签名
ELGamal
单向散列(hash算法)
只能加密,没有解密
将任意数据缩小成固定的"摘要","指纹"
任意长度输入
固定长度输出
若修改数据,指纹也会改变(不会产生冲突)
无法从指纹中重新生成数据(单向的)
功能:数据完整性检查
不论什么数据。不论数据的大小,只要用的算法相同,那么输出长度必定相同
只要数据不同,摘要完全不同,哪怕数据之间只相差一个空格字符
常用于对比数据,数据是否被修改过,数据相同,摘要必定相同
常见算法:
md5:128bit,sha1:160bit,sha224,sha256,sha384,sha512
相应工具:
md5sum,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum
md5sum filename > filename.hash:对文件生成摘要并保存至hash日志,单个文件
md5sum -c filename.hash :检查原文件是否数据被修改过
md5sum filename1 filename2 ... >> filename.hash :对多个文件生成摘要保存至文件中
md5sum -c filename.hash :可以同时对多个文件进行检查
文件完整性的两种实施方式
被安装的文件
md5单向hash
rpm -V package-name
例:修改文件内容查看hash
rpm -qf /etc/issue
centos-release-7-6.1810.2.el7.centos.x86_64
rpm -V centos-release
missing c /etc/yum.repos.d/CentOS-Base.repo
missing c /etc/yum.repos.d/CentOS-CR.repo
echo 1 >> /etc/issue
rpm -V centos-release
..5....T. c /etc/issue :5就表示md5,说明文件内容变了,T表示文件的时间变了
missing c /etc/yum.repos.d/CentOS-Base.repo
missing c /etc/yum.repos.d/CentOS-CR.repo
然后将追加的1删掉。再次比较
rpm -V centos-release
.......T. c /etc/issue :文件内容恢复。但是时间改变了
missing c /etc/yum.repos.d/CentOS-Base.repo
missing c /etc/yum.repos.d/CentOS-CR.repo
发行的软件包文件
GPG公钥签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -K tree-1.6.0-10.el7.x86_64.rpm
如果不导入公钥,系统提示没有公钥,不能检查,如果有问题提示NOT OK
CA和证书
PKI
签证机构:CA,颁发证书和吊销证书的机构
注册机构:RA,接收用户申请的机构
证书吊销列表:CRL,公布出来,说明哪些证书已经不受信任
证书存取库
X.509:定义了证书的结构以及认证协议标准
版本号、序列号、签名算法、颁发者、有效期限、主题名称
主体公钥、CRL分发点、扩展信息、发行者签名**
SSL:secure socket layer,TLS:transport layer security
1995:ssl 2.0
1996:ssl 3.0
1999:tls 1.0
2006:tls 1.1
2008:tls 1.2 当前使用
2015:tls 1.3
功能:机密性,认证,完整性,重放保护
两段性协议,分为握手阶段和应用阶段
握手阶段:客户端和服务端认证对方身份,依赖于PKI体系,利用数字证书进行身份认证,并写上通信中使用的安全参数,密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成
应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
ssl/tls协议在应用层与传输层之间
https协议:就是http和ssl的组合,对http协议的文本数据进行加密处理后在进行传输
https的底层工作原理:
客户端:客户端请求一个网站域名
服务端:服务端收到将自己申请的CA证书发送给客户端,其中包括公钥等信息
客户端:收到检查服务端证书是否合法,如果合法,生成随机的key,将来的会话密钥(对称密钥)。如果不合法,提示错误网站不安全
用服务端的公钥将生成的key加密,然后发送给服务端
服务端:用自己的私钥解密,拿到key,传送数据时使用这个key,随后的数据都使用这个key加密。
OpenSSL:开源项目
三个组件:
openssl:多用途的命令行工具,来自openssl软件包
libcrypto:加密算法库,来自openssl-libs包
libssl:加密模块实用库,实现了ssl及tls,来自nss包
openssl命令
两种模式:交互式和批处理模式
openssl ? :查看子命令
对称加密:
工具:openssl,enc,gpg
算法:3des,aes
enc命令“
man enc
加密:
openssl enc -e -des3 -in test_file -out test_file.des3
回车后两遍输入密码
解密:
openssl enc -d -des3 -in test_file.des3 -out test_file
回车后输入密码
生成随机数:
man sslrand
openssl rand -base64 num
openssl rand -hex num
非对称密钥:
成密钥对儿:man genrsa
生成密钥:
openssl genrsa -out /path/to/privatekey.file num.bit
例:(umask 066;openssl genrsa -out test.key -des 2048) :-des可省略,也可以是-des3,aes
(umask 066;openssl genrsa -out test.key) :不加密私钥
将加密后的密钥解密:
openssl rsa -in test.key -out test2.key
另一种方式:
cd /etc/pki/tls/certs :进入到目录
make /data/test.key :指定密钥存放路径,make命令会自动调用目录下一个Makefile的文件中的命令。默认是加密的
从私钥中提取公钥“
openssl rsa -in privatekey.file -pubout -out publickey.file
例:
openssl rsa in test.key -pubout -out test.key.pub
随机数生成器:伪随机数字
键盘和鼠标,块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞等待新的随机数生成
/dev/urandom:从熵池中返回随机数,随机数用尽后,利用软件生成,不阻塞
CA服务器端创建CA和申请证书
openssl的配置文件:/etc/pki/tls/openssl.cnf
配置文件中有对应的语句块,定义默认CA,也可以添加CA,CA的默认设置
文件中关于CA的选项策略,搭建CA时需要指定的信息(国家,城市,公司等等)
match:要求申请填写的信息和CA设置信息必须一致
optional:可有可无,和CA设置信息可不一致
supplied:必须填写这项申请信息
将来客户端申请填写时要注意以上字段,需要填写一致,否则报错
1、创建所需要的文件
touch /etc/pki/CA/index.txt :生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial:指定第一个颁发证书的序列号
2、CA自签证书
生成私钥
cd /etc/pki/CA/
(umask 066;openssl genrsa -out private/cakey.pem 2048) :安全
3、生成自签名证书:
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
回车后输入CA的信息,地区(两个字符,例CN),公司,CA的域名,邮箱(可选项)
选项说明:
-new:生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days n:证书的有效期限
-out /path/to/file:证书的保存路径
客户端创建私钥申请证书:
1、创建私钥
(umask 066;openssl genrsa -out http.key 1024)
2、利用私钥生成证书申请
openssl req -new -key /data/http.key -out /data/http.csr
回车后输入相关信息,默认国家,城市,和公司这三项必须填写一样。部门是自定义的,主机名也是自定以,输入将来你要作为域名的那个名字。
3、将生成的申请发送到CA服务器
scp http.csr 服务器IP:/tmp/
服务端CA签署证书,并将证书颁发给请求者
1、生成证书
openssl ca -in /tmp/http.csr -out /etc/pki/CA/certs/http.crt -days 365
回车后输入信息,默认要求国家,省,公司三项必须和CA一致
2、将证书版发给请求者客户端
scp /etc/pki/CA/certs/http.crt 客户端IP:/data/
至此证书申请完毕,使用证书是应用软件中实现,在软件例如httpd中添加此证书的路径就可以用了
查看证书中的信息
openssl x509 -in /path/to/file.crt -noout -test|issuer|subject|serial|dates
例:openssl x509 -in /data/http.crt -noout -text
openssl ca -status SERIAL :查看指定编号的证书状态