背景:
早期的互联网 -- 80年代,我们需要共享数据,传输数据;所传输或者共享的数据均为明文;
随着互联网发展,安全成为了国家的一种战略资源;
编程、运维 -- 手工业;
安全属于一种科学研究 -- 安全的算法都是需要以数学难题为基础来进行研究
为了保证数据安全,我们必须满足以下4点:
1、数据必须被加密
2、完整性校验(哈希、单向加密、指纹)
3、源认证
4、证书体系(openssl就是用来实现这个PKI证书体系架构的,它包含了前三点)
1、数据加密
数据必须背加密
1、对称密匙加密
同一个秘钥进行加密,用一个密匙进行解密;
优点:效率高
缺点:秘钥维护非常困难;秘钥交换非常困难
2、非对称秘钥加密
密钥对(公钥,私钥)
A -- B
A私钥 A公钥
B可以通过使用A的公钥对数据进行加密,再传输给A;
优点:维护密匙方便;数据比较安全
缺点:效率低下(非常低下),和对称加密相比,差距为1000倍左右
两种加密形式
1、流加密
2、完整性校验 -- 指纹
测试数据的完整性,保证数据没有被篡改
原理:获取B机器对数据的hash值,A机器对获取的数据再进行一次hash;拿A自己hash的结果,与获取到的B机器的hash结果进行比较;
如果相同,则说明数据完整;否则,数据不可信任;
hash特点:
1、不可逆性 -- 单向加密
2、雪崩效应 -- 修改一个字符,输出的结果完全不同
3、源认证
非对称秘钥的另外一个作用:
数字签名(数据加密(太慢,不使用))、秘钥交换
在做秘钥交换的时候,我们用了公钥机密私钥解密
数字签名 私钥加密 -- 公钥解密
只有自己拥有自己的私钥,用自己的私钥对数据进行加密;
对端用自己的公钥解密,如果能解密说明数据源是正确的;否则不可信任
4、*证书机制 -- PKI(openssl)
我们通过PKI(公共秘钥基础设施)架构,来实现上面提到的三点认证机制;
PKI包括:
CA -- 证书服务器 CA服务器,用来做证书签发;
RA -- 搭建CA的机构,注册证书的机构;
CRL -- 证书吊销列表;
证书:根证书,个人证书
openssl
openssl管理工具
两个加密程序调用接口 -- 库文件
常见文件:
/etc/pki/tls
扩展:1995年 由网景公司开发 ssh 2.0
1996年 ssh 3.0
1999年 网景公司快倒闭了 把ssh交给一个共有组织维护tls1.0
2006年 开发了tls1.1
2008年 开发了tls1.2 //当前互联网环境下普遍使用的ssh/tls协议
2018年 开发了tls1.3
/etc/pki/tls/openssl.cnf -- 默认主配置文件
/ur/bin/openssl -- 命令文件
/etc/pki/CA -- 证书服务器的证书服务根目录
/etc/pki/CA/certs -- 证书存放目录
/etc/pki/CA/crl --
/etc/pki/CA/private
index.txt //证书索引信息文件
serial //证书序列号
cakey.pem //ca证书申请文件
cacert.pem //ca根证书文件
ssh
ssh服务端的参数与优化
C/S和telnet一样,-- openssl(软件程序)
能够进行数据加密(你传输的密码是被加密的)
ssh协议借助ssl/tls 协议来传输数据,加密数据;
在传输数据之前,
ssh登陆过程:
1、建立ssl隧道
传输公钥
生成并传输随机秘钥信息
建立隧道
【以上操作均在隧道中完成】
2、服务器端返回登录界面
3、客户端输入密码 -- 这个密码才是用户密码(root)
ssh认证方式:
1、passed的密码认证方式
2、证书认证机制 -- 免秘钥
scp 推 拉
sftp
脚本:通过expect实现交互界面的自动化执行;
#!/usr/bin/expect
spawn -- 开启新的expect会话 #!/bin/bash
send -- 行为
expect -- 匹配字符串
interact -- timeout
expect "command" send {"yes"}
#!/bin/bash
expect << EOF
EOF
expect执行多个语句判断的时候,使用exp_continue;
对192.168.1.1 - 192.168.1.100做无密码登录:
#!/bin/bash
#
[ ! -f /root/.ssh/id_rsa.pub ] && ssh -keygen -t rsa -P '' -f '/root/.ssh/id_rsa'
expect << EOF
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.94.128
expect {
}
EOF