今天我们来说一说openssl,那到底什么是openssl呢?

  OpenSSL是一个安全工具集,同时也提供了开源程序库。它支持ssl(Secure Sockets Layer, v2/v3),TLS(Transport Layer Secure, v1)。这套工具集的应用范围非常之广

OpenSSL由三部分组成:libencrypto库,libssl库,openssl多用途命令行工具

接着我们说一下加密算法和协议:

     1,对称加密:加密和解密使用同一个密钥;

                   特性:
                    (1)、加密、解密使用同一个密钥;
                    (2)、将原始数据分割成为固定大小的块,逐个进行加密;
                    
           缺陷:
                    (1)、密钥过多;
                    (2)、密钥分发困难;

        2,公钥加密:密钥分为公钥与私钥
                公钥:从私钥中提取产生;可公开给所有人;pubkey
                私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
                特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
                
                用途:
                    数字签名:主要在于让接收方确认发送方的身份;
                    密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;

                    数据加密

            算法:RSA, DSA, ELGamal
                    DSS: Digital Signature Standard
                    DSA:Digital Signature Algorithm

      3,单向加密:即提出数据指纹;只能加密,不能解密;
                特性:定长输出、雪崩效应;
                功能:完整性;
                算法:
                    md5:Message Digest 5, 128bits
                    sha1:Secure Hash Algorithm 1, 160bits
                        sha224, sha256, sha384, sha512

      4,密钥交换

               公钥加密:通过获取对方的公钥对数据进行加密,只有对方的私钥才能解密

               DH算法(Deffie-Hellman):由两个人名组成

然后我们说一下加密解密过程:

加密过程:
第一步:发信者先用单向加密的算法计算出数据的特征码,然后用自己的私钥加密特征码,并将其结果附加在数据后面,
第二步:然后生成一个临时的对称密钥,并使用这段对称密钥加密这整段数据,
第三步:然后使用收信者的公钥加密这临时的对称密钥,并附加在这段数据后面,然后发送给收信者
解密过程:
第一步:收信者收到数据后,先用自己的私钥解密这段数据,得到对称加密的密钥后,解密其对称加密的数据,
第二步:然后用发信者的公钥解密这段特征码,能解密的话,发信者的身份得到认证
第三步:收信者再用同样的单向加密的计算方法计算这段数据,并与解密出来特征码进行比较,如果特征码相同,则数据完整性得到认证

各加密算法管理命令

openssl:默认在Centos 7上面默认安装,可以直接使用,有很多子命令可以分别管理。

    子命令分为三类:

        标准命令

        信息摘要命令(dgst命令)

        加密命令(enc子命令)

    标准命令:enc,ca,req,genrsa等等

对称加密:
        工具:openssl  enc,  gpg
        支持的算法:3des, aes, blowfish, towfish   
        enc命令:
           加密:~]# openssl  enc  -e  -des3  -a  -salt  -in fstab -out fstab.ciphertext
           解密:~]# openssl  enc  -d  -des3  -a  -salt  -out fstab -in fstab.ciphertext
 单向加密:
            工具:openssl dgst, md5sum, sha1sum, sha224sum,sha512sum ...
              dgst命令:
                ~]# openssl  dgst  -md5  /PATH/TO/SOMEFILE  (md5sum /PATH/TO/SOMEFILE)

 wKioL1chmgrh2Li0AAA34msFJMI558.png        生成用户密码:
            工具:passwd, openssl  passwd           
                openssl  passwd  -1  -salt  SALT               
        生成随机数:
            工具:openssl  rand
            
            ~]# openssl  rand  -hex  NUM
            ~]# openssl  rand  -base  NUM

wKioL1chmRfQlZpWAAAYLTfCIFs035.png      
公钥加密:

     生成私钥:~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS(2的次方))
         ~]# (umask 077; openssl genrsa -out /tmp/hello.txt 1024)
     提出公钥: ~]#  openssl  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout
         ~]# openssl rsa -in /tmp/hello.txt -pubout

wKiom1chmzaD4yhnAABpxcpSCO4015.png

PKI及创建私有CA

    PKI:公钥基础设施(Public Key Infrastructure)

        签证机构:CA

        注册机构:RA

        证书吊销列表:CRL

        整数存取库

openssl命令:
         配置文件:/etc/pki/tls/openssl.cnf           
      构建私有CA:
         在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;       
           步骤:
              (1) 生成私钥;
                   ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

              (2) 生成自签证书;
                   ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
                       -new:生成新证书签署请求;
                       -x509:生成自签格式证书,专用于创建私有CA时;
                       -key:生成请求时用到的私有文件路径;
                       -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
                       -days:证书的有效时长,单位是day;

wKiom1chnuKztjK6AACNt2i8MYs539.png

              (3) 为CA提供所需的目录及文件;
                        ~]# mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}
                        ~]# touch  /etc/pki/CA/{serial,index.txt}
                        ~]# echo  01 > /etc/pki/CA/serial

要用到证书进行安全通信的服务器,需要向CA请求签署证书:

(1) 用到证书的主机生成私钥;
            ~]# mkdir  /etc/httpd/ssl
            ~]# cd  /etc/httpd/ssl
            ~]# (umask  077; openssl  genrsa -out  httpd.key  2048)
(2) 生成证书签署请求              
           ]# openssl req -new -key httpd.key -out httpd.csr -days 365

wKioL1cho2rQB_NsAACrUTk4bDc341.png

(3) 将请求通过可靠方式发送给CA主机;
        scp certs/httpd.csr  root@172.18.253.227:/tmp
(4) 在CA主机上签署证书;
         ~]# openssl ca  -in  /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365
(5) 签署完证书以后发给服务器主机
        ~]# scp /etc/pki/CA/certs/httpd.crt root@172.18.251.235:/etc/httpd/ssl/httpd.crt

查看证书中的信息:
       ~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

吊销证书:
      步骤:
         (1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):
            ~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject
         (2) CA主机吊销证书
             先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
                        
       吊销:# openssl  ca  -revoke  /etc/pki/CA/newcerts/SERIAL.pem