[Linux]Day22-20180518【CA与证书 ;OpenSSL ;SSH ;基于key验证】

【本节主题: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

猜你喜欢

转载自www.cnblogs.com/GymUManAlvin/p/9179461.html
今日推荐