< 返回技术文档列表

简述网络通信安全技术及openssl命令行工具的基本使用

发布时间:2020-12-23 23:26:01

在互联网诞生的早期,接入互联网的主机数量不多,应用也很少。因此早期设计的协议都没有考虑到数据安全,数据在网络上都是明文传输的,非常不安全。由于互联网的迅速发展,接入互联网的主机越来越多。网络安全问题也层出不穷。那么如何在互联网上安全的传输数据呢?加密技术在其中就起到了很大的作用。


借此,ISO(国际标准组织)定义了x.800安全框架,框架基本结构如下:

      安全***:

                被动***:窃听数据

                主动***:伪装、修改消息、删除消息、重播消息

     

       安全服务机制:

                认证:验证消息的发送方是不是发送方自己声称的那个人

                访问控制:只允许用户访问授权给用户资源

                数据保密性:

                             连接保密:数据流保密(tcp连接)

                             无连接保密:数据包加密(udp)

                             选择域保密:对数据流或者数据包中的部分数据进行加密

                             流量保密:对向互联网上发送的真实数据的流量大小进行加密                                              

                数据完整性:保证数据从消息发送方到达消息接收方时没有经过非授权更改

                不可否认性:一旦通讯发生,通讯双方都不能否认


由于加密算法大多数都是公开的,纯粹用算法对数据进行加密是不安全的。因此现在的加密算法在加密的数据的时候会同时输入一段密钥,以保证数据的安全性。


数据加密流程:

简述网络通信安全技术及openssl命令行工具的基本使用

数据解密流程:     

简述网络通信安全技术及openssl命令行工具的基本使用


实现上述安全服务机制是需要算法参与的,算法的类型主要有以下几种:

       对称加密

            特性:加密解密使用同一个密钥。

            优势:加密速度快

            劣势:当一个用户需要跟众多用户进行安全通讯时需要维护众多密钥。


       公钥加密(非对称加密):

            特性: 加密解密使用一对密钥(公钥、私钥),公钥是从私钥中提取出来的

                         用公钥加密的数据只能用与之配对的私钥解密

                         用私钥加密的加密的数据只能用与之配对的公钥解密

                         公钥是公开的,任何人都可以得到,并使用

                         私钥是不公开的,只有私钥持有者可以使用

            常见算法:rsa、dsa

            优势:只需要维护一对密钥就可以跟众多用户进行安全通讯。

            劣势:加密速度慢,一不会用它来进行大


       单向加密

            特性:只加密,不解密。提取数据特征码

                        定长输出:不管输入的数据有多大,输出的特征码的长度都输固定的

                        蝴蝶效应:输入数据的微小改变会引起输出的特征码的巨大变化

              md5(128bit)、sha1(160bit)、sha192、sha256、sha384、sha512     


现在互联网上常用的安全通讯模型:

简述网络通信安全技术及openssl命令行工具的基本使用

        发送方发送数据时执行的步骤如下(分别对应于上图发送方的1、2、3):

            1、发送方将需要在互联网上进行安全传输的数据采用单向加密算法提取数据的特征码,然后用自己的私钥加密这段特征码放在数据的尾部;

            2、发送方生成一个一次性的对称加密算法的秘钥,然后使用对称加密算法和生成的秘钥将数据和加密后的特征码加密后生成密文;

            3、将上一步对称加密用到的秘钥使用接收方的公钥加密后放在密文的后面;随后就可以将数据放到互联网上进行传输。

   

       接收方接收到数据后执行的步骤如下(分别对应于上图接收方的1、2、3):

            1、接收方接收到数据后,用自己的私钥解密加密后的对称加密算法的秘钥。(如果能解密则能验证数据的机密性

            2、接收方用解密后得到的对称加密算法的秘钥后使用与发送方同样的对称加密算法解密加密的数据和加密的数据的特征码。

            3、接收方使用与发送方相同的单向加密算法提取解密后的数据的特征码,而后使用发送方的公钥对上一步解密得到的加密的数据的特征码(如果能解密,则可以验证接收方的身份),并比较这两个特征码进行比较是否一致。(如果一致,则可以验证数据的完整)。


上面讲到了单向加密、对称加密、非对称加密等算法。那这几种类型的算法该如何实现呢?有没有什么可靠的工具呢?在linux上有一款非常好用的,并且能够实现上述的所发的开源软件openssl,下面我就介绍openssl:

            

            openssl的组成部分:

                     /usr/bin/openssl:openssl多用途的命令行工具

                     /usr/lib64/libcrypto.so.10:第三方软件借助openssl实现数据加密功能的库文件

                     /usr/lib64/libssl.so.10:第三方软件借助openssl实现ssl功能的库文件


            openssl的具体应用

            获取openssl工具的帮助:

    [root@localhost ~]# openssl help    
    openssl:Error: 'help' is an invalid command.
    # 此行错误可以忽略
    
    Standard commands 
    asn1parse         ca                ciphers           cms             
    crl               crl2pkcs7         dgst              dh               
    dhparam           dsa               dsaparam          ec               
    ecparam           enc               engine            errstr           
    gendh             gendsa            genpkey           genrsa           
    nseq              ocsp              passwd            pkcs12           
    pkcs7             pkcs8             pkey              pkeyparam        
    pkeyutl           prime             rand              req             
    rsa               rsautl            s_client          s_server         
    s_time            sess_id           smime             speed            
    spkac             ts                verify            version          
    x509              
    
    Message Digest commands (see the `dgst' command for more details)
    md2               md4               md5               rmd160           
    sha               sha1              
    
    Cipher commands (see the `enc' command for more details)
    
    aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb      
    aes-256-cbc       aes-256-ecb       base64            bf               
    bf-cbc            bf-cfb            bf-ecb            bf-ofb          
    camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb 
    
    camellia-256-cbc  camellia-256-ecb  cast              cast-cbc         
    cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb        
    des               des-cbc           des-cfb           des-ecb          
    des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb      
    des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb     
    des-ofb           des3              desx              idea             
    idea-cbc          idea-cfb          idea-ecb          idea-ofb         
    rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc          
    rc2-cfb           rc2-ecb           rc2-ofb           rc4              
    rc4-40            seed              seed-cbc          seed-cfb         
    seed-ecb          seed-ofb          zlib

   

            单向加密(提取文件特征码):                     

       用法:openssl dgst [-md5|-md4|-md2|-sha1|-sha] [file...]
       
       示例:
       [root@localhost ~]# openssl dgst -md5 /etc/passwd    
       MD5(/etc/passwd)= cde0b986a93a765834fe7183e53dc16d
       # dgst:指定用openssl工具实现提取文件特征码,
       # -md5:指定使用MD5算法提取文件特征码


            对称加密:

       用法:openssl enc -ciphername [-in filename] [-out filename]
       
       示例:
       [root@localhost ~]# openssl enc -des3 -in /etc/passwd -out /tmp/passwd.enc
       enter des-ede3-cbc encryption password:
       Verifying - enter des-ede3-cbc encryption password:
       # 输入两次密码对文件进行加密
       [root@localhost ~]# file /etc/passwd
       /etc/passwd: ASCII text   # 明文
       [root@localhost ~]# file /tmp/passwd.enc 
       /tmp/passwd.enc: data     # 密文 
       [root@localhost ~]# openssl enc -des3 -in /tmp/passwd.enc -out /tmp/passwd.2 -d
       enter des-ede3-cbc decryption password:
       # 输入加密时使用的密码对文件进行解密
       [root@localhost ~]# file /tmp/passwd.2
       /tmp/passwd.2: ASCII text # 明文

                  

            生成非对称密钥中的私钥由于非对称密钥通常不用来进行数据加密,因此此处不介绍如何用非对称密钥对数据进行加密

       用法:openssl genrsa [-out filename] [numbits]
       
       示例:
       [root@localhost ~]# openssl genrsa -out /tmp/key.pri 2048
       Generating RSA private key, 2048 bit long modulus
       .......................+++
       ...+++
       e is 65537 (0x10001)

                         

            从私钥中提取与之对应的公钥

       用法:openssl rsa [-in filename] [-pubout] [-out filename]
       
       示例:
       [root@localhost ~]# openssl rsa -in /tmp/key.pri -pubout -out /tmp/key.pub
       writing RSA key


            生成随机数

       用法:openssl rand [-hex] num
       -hex:基于十六进制生成随机数
       
       示例:
       [root@localhost tmp]# openssl rand -hex 6
       d13a62e6cdb0





/template/Home/Zkeys/PC/Static