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:

linux c aes加密字符串 linux sha256加密命令_服务端


             单向加密:
                    算法:md5,sha1
                    工具:openssl dgst,md5sum,sha1sum,sha224sum,sha256sum,sha384sum,

                                sha512sum
                    openssl dgst -算法 PATH  此处算法为上述算法且不限于上述算法,但不同于加密算法

                    mac码:用于表示数据完整性的值
                        机制:CBC-MAC
                        HMAC:md5或者sha1算法

linux c aes加密字符串 linux sha256加密命令_客户端_02

      

               生成用户密码:
                        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
                                公钥加密:完成秘钥交换
                                私钥加密:完成身份验证

        

linux c aes加密字符串 linux sha256加密命令_linux c aes加密字符串_03

        

linux c aes加密字符串 linux sha256加密命令_服务端_04


         随机数生成器:
                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时才这么用;    


linux c aes加密字符串 linux sha256加密命令_客户端_05

linux c aes加密字符串 linux sha256加密命令_随机数_06

提供帮助文件及输入序列号
                                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 user@host

                                

 scp远程复制命令:
                push: scp [-rp] /path/from/somefile user@host:/path/to/somewhere
                pull: scp [-rp] user@host:/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


转载于:https://blog.51cto.com/610463479/1696934