我的学习笔记1:加密、解密,以及OpenSSL创建私有CA

1.OpenSSL—就是在SSL协议Linux主机上实现的一个软件,从而完成SSL的应用

2.NCIST 数据安全性法则:
(1)保密性。包括:数据保密性、隐私性
(2)完整性。包括:数据完整性、系统完整性
(3)可用性

3.加密算法
1.对称加密
特性:
(1)加密和解密使用同一个密钥。主要用于数据加密。
(2)将明文分割成固定大小的块,逐个进行加密。而非加密整个文件

    依赖于:算法和密钥。安全性依赖于密钥,而非算法。
    常见对称加密算法:
        DES:Data Encryption Standard,使用56bits的密钥
        3DES:就是对DES执行3轮
        AES:Advanced Encryption Standard,采用(128bits,192bits,256bits)变化的密钥长度。(最常用的)
        Blowfish
        Twofish
        IDEA
        RC6
        CAST5

    缺陷:
        1.密钥过多(当与更多的主机进行密钥通信时,针对不同的主机就会采用不同的密钥)
        2.密钥分发


2.非对称加密,即公钥加密(其密钥是成对儿出现)
    密钥对儿:私钥和公钥
        私钥:仅允许个人使用,secret key
        公钥:公开给所有人使用,public key。(公钥从私钥中提取而来,创建时只需创建私钥即可,另外使用公钥加密的数据,只能使用此公钥配对儿的私钥解密;反之亦然)

    特性:
        1.密钥长度较大,例如:512bits,2048bits
        2.加密、解密分别使用密钥对儿中的密钥相对进行
        3.常用于数字签名和密钥交换


    用处:
        1.身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份。
        2.密钥交换:与被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方。
            不能用来加密数据的原因:
                公钥加密算法长度太长,而数据一般很大,因此加密效率极低,仅用于加密密码
    常用的公钥加密的算法:
        RSA:密钥认证、数据交换都可应用(最常用)
        DSA:仅用于密钥认证
        ELGamal:


3.单项加密(指数据能加密但不能解密):主要用于提取数据的特征码
    特性:
        1.定长输出:无论原来的数据是多大级别,其加密结果长度一样
        2.有雪崩效应:原始数据的微小改变将会导致结果的巨大变化
        3.不可逆:

    算法:
        MD5:采用128bits的定长输出
        SHA1:采用160bits的定长输出,一共有2^160种
        SHA256
        SHA384
        SHA512

        CRC32:循环冗余校验码

    在/etc/shadow文件中就使用的单项加密算法:
    ![这里写图片描述](https://img-blog.csdn.net/20150813215409395)

    用处:
        1.数据完整性


    数字签名:就是通信方用自己的私钥加密提取的特征码,就称为数字签名

    密钥交换:




5.一次加密通信的全过程
    发送者:
        1.使用单项加密算法提取出数据的特征码
        2.用自己的私钥加密特征码并附加在数据的后面
        3.生成用于对称加密的临时密钥
        4.用生成的临时密钥加密数据和已加密的特征码
        5.使用接收方的公钥加密临时密钥,并附加在对称加密的后方
    接收者:
        1.使用自己的私钥解密临时密钥,从而获得对称密钥
        2.使用对称密钥解密对称加密的数据和私钥加密的特征码密文
        3.使用发送方的公钥解密特征码密文,从而获得对方计算生成的特征码和数据
        4.使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较

6.数字证书
    CA:证书颁发机构,对通信双方的公钥进行签名、认证。
        功用:保证公钥信息安全分发

    数字证书的格式(x.509):
        版本号(version)
        序列号(serial number)
        签名算法标志
        发行者的名称:CA自己的名称
        有效期:两个日志:起始日期和终止日期
        证书主体名称:证书拥有者的名字
        证书主体公钥信息:证书拥有者自己的公钥
        发行商的唯一标识:
        证书主体的唯一标识
        扩展信息:
        签名:CA对此证书的数字签名

    证书通常有2类用途:
        用户证书:某个用户单独使用
        主机证书:(直接放在某主机上,被某个主机进程使用,如httpd进程)

    撤销证书:

7.PKI:Public Key Infrastructure,公钥基础设施
    组成部分:
        签证机构:CA
        注册机构:RA
        证书吊销列表:CRL
        证书存取库:

8.NetScape---网景公司,研发浏览器以及web浏览器,以及SSL也是其研发的。
    SSL协议,现在的版本:sslv1,sslv2,sslv3
    TLS协议:transport layer security,现在版本:tlsv1,

    http基于ssl协议后就变成了https,https监听在443端口上

9.openssl的组成部分:
    libcrypto:加密、解密库文件
    libssl:ssl协议的实现
    openssl:多用途的命令行工具,每种功能都使用专用的子命令来实现
linux中另一个加密解密的工具---gpg:全称GNU Privarcy Guard,是pgp规范的实现

10.openssl:
    子命令分类:
        标准命令
        消息摘要命令
        加密、解密相关的命令

        1.加密文件(使用对称加密),
            工具:openssl enc,gpg
            算法:des,3des,aes,blowfish,twofish,idea,cast5

            enc工具简单用法:
            #openssl enc -e CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/FROM/SOMECIPHERFILE

            #openssl enc -d CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/FROM/SOMEFILE


            1.加密fstab文件
            #openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
                -e :表示加密,encryption
                -des3:表示使用的加密算法为des3
                -a :表示使用ASCII格式输出文本内容
                -salt:表示加密使用杂质
                -in fstab:表示要加密的文件为fstab
                -out fstab.des3:表示加密后的文件的名字叫fstab.des3
            #cat fstab.des3
            2.解密文件
            #openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab.new
                -d:表示解密
            #cat fstab.new

        2.单向加密:(提取特征码)
            算法:md5,sha1
            工具:openssl dgst,md5sum

            简单用法:
            #openssl dgst -CIPHER /PATH/TO/SOMEFILE…..

            1.产生fstab.new文件的特征码
                #openssl dgst -md5 fstab.new
                    -md5:使用md5码来计算文件fstab.new特征码,并显示在屏幕上
                #md5sum fstab.new

                上述两者产生的md5码是一样的,

            2.MAC:消息认证码,单向加密的一种延伸 应用,用于实现在网络通信中保证所传输的数据的完整性
            常用的MAC机制:
                CBC-MAC
                HMAC:使用md5或sha1算法

        3.生成用户密码:

            简单用法:
                #openssl passwd -1 -salt 8bits随机数
                一般8bits随机数 随机生成
            实例:
            #openssl passwd -1 -salt 12345678
            输入密码即可
                -1:表示使用MD5码加密
                -salt 12345678:表示加入杂质,防止密码一样而后生成的md5码一样

        4.生成随机数
        #openssl rand [-hex|-base64] NUM
            1.#openssl rand -hex 4
                4:表示4个字符,每个字符用2位二进制来表示
            生成的随机数是0-9,a-f等16进制的随机数组成

            2.#openssl rand -base64 4
            生成的随机数a-z,1-9,A-Z等任何文本字符组成

        5.整合生成随机数和用户密码
        1.
        #openssl passwd -1 -salt $(openssl rand -hex 4)


        6.生成密钥对儿(即生成私钥,从私钥中提取出公钥)

            简单用法1(生成密钥):genrsa
            #openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUMBITS
                gensa:生成密钥的
                -out /PATH/TO/PRIVATE_KEYFILE :指明生成密钥文件
                NUMBITS:指明密钥长度

            1.
            #openssl genrsa -out test.key 2048
                  #cat test.key
            #chmod 400 test.key
            【生成私钥后,一定要更改私钥的权限,仅root用户可读,其他用户、组都无权限】

            2.
            #(umask 077;openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUMBITS
            )
            #ll /PATH/TO/PRIVATE_KEYFILE

            生成的test.key文件的权限自动就是600
            注意:在bash命令行放在小括号执行的命令,其实是通过打开一个子shell进程进行的;

            简单用法2(从私钥中提取公钥):rsa
            #openssl rsa -in /PATH/TO/PRIVATE_KEY_FILE -pubout
            1.从test.key提取公钥并输出在屏幕上
            #openssl rsa -in test.key -pubout


    系统上随机数生成器:random,urandom

        熵池:用来保存硬件中断产生的随机数。被映射为两个设备文件:
        /dev/random:仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的进程将会被阻塞
        /dev/urandom:先从熵池中取随机数,当熵池中的随机数耗尽时,就通过伪随机数生成器生成随机数


    X.509版证书格式:
    ![这里写图片描述](https://img-blog.csdn.net/20150813215310271)




    获取证书的方法:
        1.向RA注册申请
        2.建立私有CA,主要工具:OpenSSL

    使用OpenSSL构建私有CA:
        1.生成私钥(私钥用于签发证书时,向证书添加数字签名使用)
        2.生成自签署证书(证书用于实现与每个通信方都导入此证书至“受信任的证书颁发机构”)

        配置文件:/etc/pki/tls/openssl.cnf
        工作目录:/etc/pki/CA/

        #cd /etc/pki/CA/;ls
        certs crl newcerts private
            certs:证书存放位置
            crl:证书吊销列表存放位置
            newcerts :新创建的证书存放位置
            private:CA自己私钥的存放位置,cakey.pem为其私钥
        生成CA的私钥,保存在private/下名为cakey.pem的文件,密钥长度为2048位
        #(umask 077 ;openssl genrsa -out private/cakey.pem 2048)

        生成自签证书的命令 :req,自请自签,
        #openssl req -new -x509 -key private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
            -new:表示生成的新的证书签署请求
            -x509:表示自己跟自己签证,直接输出自签署的证书文件,通常只有构建CA的时候才用
            -key private/cakey.pem :指明私钥的位置,用于提取公钥
            -out /etc/pki/CA/cacert.pem :表示将生成的证书保存在/etc/pki/CA/cacert.pem文件里面
            -days 3650:表示签署证书的有效期为10年,单位为“天”
        然后继续签署即可,构建私有证书就完成了

        给节点发证书
            1.节点申请证书
                (在证书申请的主机上进行如下步骤)
                (1)生成私钥
                (2)生成证书签署请求
                (3)把请求发送给CA

                【注意:】
                    (1)其中的subject信息部分,要与CA的保持一致
                    (2)Common Name要使用此主机在通信真实使用名字

            2.CA签发证书
                (1)验证请求者信息
                (2)直接签署证书
                    #openssl  ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
                (3)把签好的证书发还给请求者
            3.提供辅助文件


            示例:在web服务器下
            #cd /etc/httpd/;ls
            #mkdir ssl
            #cd ssl/
            生成私钥
            #(umask 077 ;openssl genrsa -out httpd.key  1024)
            生成证书签署请求
            #openssl req -new -key httpd.key -out httpd.csr
            签署请求即可

            将证书请求发送给CA服务器端(若在同一台主机上就不用发了)

            创建CA所需要的文件:index.txt,serial
            #cd /etc/pki/CA;ls
            #touch index.txt
            #echo 01 > serial

            签署请求
            #openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3650


    吊销证书
        (1)获取吊销证书的序列号
        #openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject 
        (2)CA实现证书吊销
            1.吊销证书
            #openssl ca -revoke /PATH/FROMCRT_FILE 
            2.生成吊销证书的编号
            #echo 01 > /etc/pki/CA/crl/number
            3.更新证书吊销列表
            #openssl crl -gencrl -out THISCA.crl

        示例:接上
        #openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject

    子命令:genrsa,req ,ca,x509,crl
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值