【本节主题:CA与证书 ;OpenSSL ;SSH ;基于key验证】
复习回顾:
对称加密
保证数据安全:使用对方的公钥加密(只能使用对方私钥解密)
确认数据来源:使用我方的私钥加密(对方只能用我方的公钥解密)【实现“数字签名”功能】
哈希散列算法
实现数据完整性检查(数据校验)
生产中:综合三种算法
(1)生成摘要
(2)我方私钥签名
(3)使用对称密钥加密
(4)使用对方公钥加密对称密钥
CA:证书颁发机构
(1)A先把A的公钥传给CA
(2)检查A的公钥
(3)CA使用自己的私钥对A的公钥进行签名,生成证书
使用CA私钥签名过的A的公钥+CA的描述+有效期+A的公钥
(4)CA再把证书传给A
(5)A再把证书传给B
(6)B拿CA的公钥解密证书,证明证书确实是来自CA,来源可信
根CA:RootCA
子CA:SubCA
PKI:公共密钥体系
CA:颁发机构【类似于公安局】
RA:注册机构【类似于派出所】(接受申请的机构)
CRL:证书吊销列表
证书存取库:数据库
X.509
主体名称:给谁颁发的
证书类型:
证书授权机构证书
服务器证书
用户证书:用户使用的证书
证书的应用场景:
SSL:安全套接层
TSL:传输层安全
SSL/TLS
安全协议
功能:
防重放:重新发一遍加密信息,(同样的数据包仅在第一次发送有效,有效期只有一次)
HTTPS协议=HTTP协议+SSL/TLS协议
HTTPS
(1)服务器证书:使用CA的私钥签名服务器的公钥
(2)客户端在本地浏览器使用服务器的公钥加密对称密钥
(3)服务器使用自己的私钥解密,拿到客户端的对称密钥
客户端证书
验证客户端的身份【例如支付宝证书】
需要用到的软件包:openssl
openssl工具集
enc:encryption,加密
ca:CA
req:request,申请证书
[root@Alvin ~]# man enc
//查看openssl的enc帮助
[root@Alvin ~]# openssl enc
//Base64:a~z,A~Z,0~9,+,/
//Base64编码相比ASCII,字符具有可读性
盐:为加密后的数据添加杂质,使得每一次加密后的数据都不一样
==:是在Base64过程中为了凑足6bit而添加的无效的0
3的倍数不添加等号
3位=3*8bit=24bit-->可以整除64
[root@Alvin ~]# man dgst
//查看openssl的dgst帮助
生成加密口令
[root@Alvin ~]# openssl passwd -1 -salt "xxxxxxxx"
//"xxxxxxxx"是8位的盐
[root@Alvin ~]# openssl rand -base64 20 | tr -dc '[:alnum:]' | head -c8
//(1)随机生成20个字符,可能存在数字和字母之外的字符
//(2)去掉数字和字母之外的字符
//(3)取前8个字符
[root@Alvin ~]# (umask 066;openssl genrsa -out private.key 1024)
//(1)使用临时的umask,新生成文件的权限是600
//(2)genrsa -out :使用Base64生成私钥文件
//(3)1024 :指定私钥的字符长度
[root@Alvin ~]# openssl rsa -in private.key -out private.key2
//(1)rsa -in :去掉私钥加密口令
//(2)-out :生成没有加密的私钥文件
[root@Alvin ~]# openssl rsa -in private.key2 -pubout -out public.key2
//(1)rsa -in :使用没有加密的私钥文件
//(2)-pubout -out :生成没有加密的公钥文件
实验:向CA申请证书
一、建立RootCA【自己给自己颁发证书】【CentOS7:CA】
1、生成私钥
(1)CA配置文件:/etc/pki/tls/openssl.cnf
[root@Alvin ~]# vim /etc/pki/tls/openssl.cnf
dir:
cers:
crl_dir:
database:数据库索引文件,需要手工touch创建
new_cers_dir:新证书目录
certificate:CA的证书文件,由上级CA颁发(RootCA由自身颁发)
serial:下一个要颁发证书的编号,是一个16进制数
crlnumber:下一个要吊销证书的编号,也需要手工touch创建
private_key:私钥文件
RANDFILE:生成私钥时使用到的随机数文件
default_days:默认有效期
default_md:默认的算法是哈希算法
policy:定义匹配程度
policy_match:私有CA策略,要求三项都匹配(国家、省、公司组织)
commonName:通用名【申请的证书是给谁用的】
policy_anything:公有CA策略
(2)
[root@Alvin ~]# cd /etc/pki/CA
(3)
[root@Alvin ~]# (umask 077;openssl genrsa -out private/cakey.pem 4096)
//umask 077
//genrsa -out private/cakey.pem
//
//4096
2、自签名证书
(1)
[root@Alvin ~]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
> CN
> beijing
> beijing
> magedu
> M30
> CA.www.magedu.com
>
(2)查看内容
[root@Alvin ~]# openssl x509 -in cacert.pem -noout -text
//x509 -in :指定x509格式
//-noout :不创建文件,直接输出到STDOUT
//-text :以文本形式
二、用户或服务器【CentOS6:client】
1、生成私钥
(1)
[root@Alvin ~]# cd /data
(2)
[root@Alvin ~]# (umask 077;openssl genrsa -out app.key 1024)
2、生成证书申请文件
(1)利用私钥文件生成申请文件
[root@Alvin ~]# openssl req -new -key app.key -out app.csr
> CN
> beijing
> beijing
> magedu
> M30
> app.magedu.com
>
>
3、将申请文件发给CA
(1)
[root@Alvin ~]# scp app.csr 172.20.0.7:/etc/pki/CA
三、CA颁发证书【使用自己的私钥签名】
1、建数据库文件
[root@Alvin ~]# touch index.txt
2、颁发证书的编号,从 0F 开始
[root@Alvin ~]# echo 0F > serial
3、
[root@Alvin ~]# openssl ca -in app.csr -out cers/app.crt -days 100
> y
> y
//ca -in app.csr
//-out cers/app.crt
//-days 100
❓默认不允许创建两个“申请请求一样”的证书
4、
[root@Alvin ~]# cat certs/app.crt
四、证书发送给客户端【拷贝】
1、
[root@Alvin ~]# scp app.crt 172.20.0.6:/data/
五、在应用软件中使用证书
****
吊销证书
[root@Alvin ~]# openssl ca -revoke newcerts/10.cnf
生成吊销列表
[root@Alvin ~]# echo 1F > /etc/pki/CA/crlnumber
[root@Alvin ~]# openssl ca -gencrl -out crl.pem
[root@Alvin ~]# cd /etc/pki/tls/
[root@Alvin ~]# cat Makefile
//可以借用Makefile脚本来创建证书、证书自签名
SSH
来自于OpenSSH软件包
SSH客户端
配置文件:/etc/ssh/ssh_config
客户端会自动记录远程主机的公钥
~/.ssh/known_host
SSH服务器
私钥 /etc/ssh/ssh_host_rsa_key
注意:
(1)要偷到私钥文件,还要改所属组
(2)建议使用 scp -p 保留属性
ssh
-p PORT :指定连接的端口
-b IP :指定发起连接的IP地址
-X :
-t :伪终端
[root@Alvin ~]# ssh -t 192.168.30.6 192.168.30.17
//借助30.6去连接30.17
生成私钥公钥对
[root@Alvin ~]# ssh-keygen -t rsa
>
>
>
基于key验证
[root@Alvin ~]# ssh-copy-id -i id_rsa [email protected]
//-i id_rsa :
//[email protected] :不写用户名
//192.168.30.7 :不写用户名的话,默认是root远程主机的
实验:三台主机基于key验证
在任意一台主机上,比如:IP-A
1、
[root@Alvin ~]# ssh-keygen -p
> centos //对称加密口令
2、
[root@Alvin ~]# ssh-copy-id IP-A
3、
[root@Alvin ~]# scp -pr ~/.ssh IP-B
[root@Alvin ~]# scp -pr ~/.ssh IP-C
//IP-B:相当于 root@IP-B:~/
实验:启用代理托管口令
[root@Alvin ~]# cd .ssh/
[root@Alvin ~]# ssh-keygen -i -f Identity.pub >> authorized_keys
实验:批量管理企业100台机器
使用expect推送公钥
[root@Alvin ~]#
[root@Alvin ~]# vim sshKey.sh
#!/bin/bash
rpm -q expect &> /dev/null || yum install expect -y
##
ssh-keygen -P "" -f "/root/.ssh/id_rsa"
password=centos
##
while read ipaddr;do
expect <<EOF
set timeout 10
spawn ssh $ipaddr
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
done < ip.txt
把交互式命令变非交互式
[root@Alvin ~]# ssh-keygen -P "" -f "/root/.ssh/id_rsa"
设密码
[root@Alvin ~]# echo centos | passwd --stdin root
scp [option...] SOURCE DIRECTION
-r
-p
复制的时候,无论文件内容是否有变更,一概全部复制
rsync [option...] SOURCE DIRECTION
-a
-v
增量性复制(incremental)
可以实现自动文件同步
[root@Alvin ~]# rsync -av /data/ 192.168.30.6:/data/
//只复制目录下的文件到目标主机
[root@Alvin ~]# rsync -av /data 192.168.30.6:/data/
//把整个目录递归复制到目标主机
pssh
前提:
(1)需要先配置EPEL yum源
(2)安装pssh软件包
[root@Alvin ~]# ipaddr="192.168.30.17 192.168.30.6"
[root@Alvin ~]# pssh -H "${ipaddr}" -A -i hostname
[root@Alvin ~]# pssh -h ip.txt -A -i hostname
-H
-h
-A
-i
从来没有连过的机器,需要手动ssh 输yes,然后才不会报错!
[root@Alvin ~]# "sed -ri.bak 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config"
pscp
基于pssh的scp
[Linux]Day22-20180518【CA与证书 ;OpenSSL ;SSH ;基于key验证】
猜你喜欢
转载自www.cnblogs.com/GymUManAlvin/p/9179461.html
今日推荐
周排行