linux下的加密解密学习
加密/解密:
加密协议:加密解密使用同一秘钥:3des,aes
公钥加密:公钥私钥对
数字签名,密钥交换
RSA,DSA数据签名算法(DSS数据签名标准)
单向加密:
md5,sha1,sha256,sh512(MD5输出128bit,SHA1输出160bit,SHA256输出256bit)
密钥交换:
DH:Deffie-Hellman
具体过程参照下面的SSL握手
===================================================
SSL:secure socket layer
ssl:sslv3现版本
IETF:tlsv1.0对位sslv3 tlsv1.2现在
ssl握手:
客户端->服务端:客户端自身支持的算法,请求服务器数字证书
服务端->客户端:服务器端支持加密算法,发送数字证书(客户端验证信息后,数字证书中得到服务端公钥,加密发送服务器)
客户端验证数据:1.服务器名字与证书名字是否一致;2.用本地缓存的对应信任CA公钥,解密证书,查看是否一致;3.检察证书内容是否被篡改,单向加密码验证;4.看证书是否到期;5看证书是否到期
客户端->服务端端:加密数据发给客户端,对称秘钥交换,之后对称秘钥加密通讯
数字证书:
CA:签发安全证书,确保数据安全性
===============================================
openssl:
组成部分:
libcrypto:加密解密文件
libssl:ssl协议实验
openssl:多用途命令行工具,自定义
gpg:pgp规范的实现
openssl加密命令:
加密文件(对称加密):
工具:openssl enc,gpg
算法:des,3des,aes,blowfish,twofish,idea,cast5
enc工具:
加密openssl enc -e -算法 -a -salt -in 加密文件 -out 输出文件
解密openssl enc -d -算法 -a -salt -in 加密文件 -out 输出文件
可通过openssl ?查看
-a表示文本编码输出
-salt加随机数
TEST:
单向加密:
算法:md5,sha1
工具:openssl dgst,md5sum,sha1sum,sha224sum,sha256sum,sha384sum,
sha512sum
openssl dgst -算法 PATH 此处算法为上述算法且不限于上述算法,但不同于加密算法
mac码:用于表示数据完整性的值
机制:CBC-MAC
HMAC:md5或者sha1算法
生成用户密码:
openssl passwd -1 -salt 8位随机数
生成随机数:openssl rand -hex 4
公钥加密:
工具:gpg ,openssl rsautl
生成密钥对:
操作过程:生成私钥,从私钥中提取公钥
openssl genrsa -out PATH NUM_BITS
括号内的命令:通过打开一个子shell进程进行
(umask 077;openssl genrsa -out PATH NUM_BITS)主要为了安全性考虑,子shell运行不影响原机环境
从私钥中提取公钥:
openssl rsa -in PATH -pubout
公钥加密:完成秘钥交换
私钥加密:完成身份验证
随机数生成器:
random( 安全系数较高), urandom
熵池:保存硬件中断产生的随机数
/dev/random:仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的进程将会被阻塞;
/dev/urandom:先从熵池中取随机数,当熵池中的随机耗尽时,就通过伪随机数生成器生成随机数;
使用openssl构建私有CA:
1.生成秘钥
2.生成自签署签名
(1) 私钥用于签发证书时,向证书添加数字签名使用;
(2) 证书:每个通信方都导入此证书至“受信任的证书颁发机构”;
创建CA配置文件 :/etc/pki/tls/openssl.cnf (查看此文件可查看一下配置文件存放位置及相关信息)
工作目录:/etc/pki/CA/
1.建立私有秘钥文件:/etc/pki/CA/private/cakey.pem
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2.生成自签署签名:从密钥从提取公钥及数字签名证书到/etc/pki/tls/openssl.cnf指定的certificate指定位置
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days #
-new: 生成新的证书签署请求;
-key:私钥文件路径,用于提取公钥;
-days N: 证书有效时长,单位为“天”;
-out:输出文件保存位置;
-x509:直接输出自签署的证书文件,通常只有构建CA时才这么用;
3.提供辅助文件:提供帮助文件及输入序列号
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
分发证书:
TEST:
Openssh:
ssh:secure shell (监听tcp/22) 用于取代talnet(明文传输,监听tcp/23)
现在主流版本为V2
两种验证方式:
1.用户口令
2.密钥对验证
Openssh:ssh开源软件
sshd: 服务器
ssh: 客户端
scp: 安全跨主机复制工具,基于ssh协议实现;
sftp:安全ftp
服务器配置文件:sshd: /etc/ssh/sshd_config
客户端配置文件:ssh: /etc/ssh/ssh_config
基于密钥认证:
在客户端生成一对密钥,私自己留存;公钥通过私密方式保存至要登录的远程服务某用户的家目录的专用于ssh通信的文件;
生成秘钥 :ssh-keygen -t rsa
传输秘钥:ssh-copy-id -i ~/.ssh/id_rsa.put [email protected]
scp远程复制命令:
push: scp [-rp] /path/from/somefile [email protected]:/path/to/somewhere
pull: scp [-rp] [email protected]:/path/from/somefile /path/to/somewhere
-P portnumber(一旦默认端口更改需加此参数)
sshd服务器端的配置:
/etc/ssh/sshd_config
directive value
Port 22 监听端口
AddressFamily any 监听地址(通过那个地址对外提供服务)
Protocol 2 版本协议
限制可登录用户:
PermitRootLogin : 是否允许管理员直接登录;
AllowUsers user1 user2 ...允许登陆白名单
AllowGroups grp1 grp2 ... 允许登陆组白名单
DenyUsers user1 ... 允许登陆黑名单
DenyGroups grp1 ... 允许登陆黑名单
仅监听需要监听的IP地址:
ListenAddress 0.0.0.0
最大允许登陆尝试数:
MaxAuthTries 6
ssh登陆log日志:
/var/log/secure