Linux之加密解密基础、openssl及CA基础应用


   加密解密基础简介

   数据在网络中传输过程中要保证三个要点:

       (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改

       (2)数据的机密性:防止文件数据泄漏给未授权用户从而让其利

       (3)数据的可用性:保证授权用户能按需访问存取文件数据

    因此加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法

    解密:将密文转换成能够直接阅读的文字(即明文)的过程称为解密

  

    常见加密类型: 对称加密、公钥加密、单向加密

    (1)对称加密:加密和解密同一个密钥,依赖于算法和密钥。

         特性:加密、解密使用同一密钥;将明文分隔成固定大小的块,逐个进行加密

         缺点:密钥过多、密钥分发

         常见的加密算法:DES、3DES(DES增强版)、AES(加密位数128bits、192bits、458bits、384bits、512bits)

     大致的实现原理如下图:

Linux之加密解密基础、openssl及CA基础应用_CA

    (2)公钥加密:有两个不同的密钥:私钥(private key)和公钥(public key),使用公钥加密的数据只能由对应的私钥解密 

         特性: 密钥长度较大;加密解密分别使用密钥对儿中的密钥相对进行;常用于数字签名和密钥交换  

         常见加密算法:RSA 、 DSA(数字签名算法)

     大致的实现原理如下图:

Linux之加密解密基础、openssl及CA基础应用_对称、加密、解密、单向_02

    (3)单向加密:只能加密不能解密,提取数据特征码

         特性:输入一样,输出必然相同;输入的微小改变,会造成结果的巨大变化;无法根据特征码还原原来的数据;定场输出

         常见加密算法:MD1,MD5,SHA1,SHA512,CRC-32 

     大致的实现原理:单向加密通常用于验证数据的完整性,在数据发送之前,对数据进行单向加密得出特征码,然后接受者再次对接收的数据使用同样的单向加密,如果得到的特征码相同,则说明数据是完整的。因此单纯的使用单向加密,无法保证数据被篡改,因此还需要借助其他加密算法(如数字签名)。


     以上加密的各种算法只是对文件进行了加密,如何保证在网络上进行安全的传输,而不被窃听,篡改等?

     这里先阐述一次加密传输原理过程:

      发送端:

1)、使用单向加密算法提取生成数据的特征码

2)、使用自己的私钥加密特征码附加在数据后面

3)、生成用于对称加密的临时密钥

4)、用此临时密钥加密数据和已经使用私钥加密后的特征码

5)、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方


接收端:

1)、使用自己的私钥解密加密的临时密钥;从而获得对称密钥

2)、使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文

3)、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码

4)、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较

    阐述中提到的公钥,用来加密/验章用;私钥是用来解密/签章。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。


    随着传统模式开始走向电子化和网络化,网络传输迫切需要解决真实身份、数据完整性、机密性、准确性、不可否认性,引入了基于加密技术的数字签名。

    PKI(Public Key Infrastructure)是使用公开密钥密码技术来提供和实施安全服务的基础设施,主要组成部分有:认证中心(CA )、注册中心(RA)、密钥管理中心(KMC)、证书发布;其中CA(Certificate Authority)系统是PKI体系的核心,主要实现数字证书的发放和密钥管理等功能。数字证书由权威公正的CA中心签发,是网络用户的***明。使用数字证书,结合数字签名、数字信封等密码技术,可以实现对网上用户的身份认证,保障网上信息传送的真实性、完整性、保密性和不可否认性。数字证书目前已广泛应用于安全电子邮件、网上商城、网上办公、网上签约、网上银行、网上证券、网上税务


等行业和业务领域。

    数字证书:数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证

    证书格式是 x509 格式,主要内容有:

           版本号(version)

           序列号(serial number),CA 用于唯一标志此证书

           签名算法标志(signatur algotithm ientifier)

           发行者的名称,即 CA 自己的名称

           有效期,起始日期和终止日期

           整数主题明还曾,整数拥有者自己的公钥

           发行商的唯一标识

           整数主题的唯一标志

           扩展信息

           签名:CA 对此证书的数字签名


         SSL:Secure Socket layer(安全套接字层)

              1995年由网景公司设计,发布SSL2.0版本,后推出3.0版本,1999年推出TLS1.0,相当于SSL3.0升级版,现在常用TLS1.2版本

          分层设计:

               1)、最低层:基础算法原语的实现,aes, rsa, md5

               2)、向上一层:各种算法的实现

               3)、再向上一层:组合算法实现的半成品

               4)、用各种组件拼装而成的种种成品密码学协议/软件:tls, ssh

     

     openssl应用

     OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH。


OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。主要组成部分:libcrypto(通用功能密码算法库)、libssl(SSL协议库,用于实现TLS/SSL的功能)、OpenSSL多功能命令行工具(能够实现生成密钥、创建数字证书、手动加密解密数据)

     openssl命令常见参数选项:

         -e:指定为加密,可以不写默认为加密。

         -des3:指定算法算法

         -salt:默认设置,生成一段字符串放在密码最前面进行加密,提高解密难度。

         -a:基于base64处理数据。加密结果进行base64编码处理

         -in:读取那个文件进行加密

         -out:输出到那里

         -d:指定为解密

      练习:

      1)、用3des 加密/tmp/fstab ,存放于/var/目录中

Linux之加密解密基础、openssl及CA基础应用_CA_03

      2)、解密var/fstab,并存放为/var/fstab.new

Linux之加密解密基础、openssl及CA基础应用_对称、加密、解密、单向_04

      3)、提取tmp/fstab特征码

Linux之加密解密基础、openssl及CA基础应用_CA_05

    openssl私有CA应用

    私有 CA 先要生产 CA 自己的证书,CA的家目录是在/etc/pki/CA,各个目录保存的内容为:

        certs:签发的证书存放的地方

      private:存放CA的私钥(很重要)

          crl:吊销的证书存放的地方

     newcerts:签发新证书存放的地方

       serial:签发证书的序列号(需创建),serial 起始序列号需要指定

    index.txt:数据库的索引文件(需创建)

    crlnumber:吊销证书的序列号(需创建)

    CA证书的路径在 /etc/pki/tls/openssl.conf 中配置, 在 [ CA_default ] 选项下

       dir  =  /etc/pki/CA              #工作目录

       certs =  $dir/certs              #客户端证书保存目录

       crl_dir =  $dir/crl              #证书吊销列表的位置

       database=  $dir/index.txt        #证书发证记录数据库

       new_certs_dir  =  $dir/newcerts  #新生成证书存放目录

       certificate =  $dir/cacert.pem   #CA的证书文件

       serial=  $dir/serial             #签发证书的序列号,一般从01开始

       crlnumber=  $dir/crlnumber       #帧数吊销列表的序列号

       crl=  $dir/crl.pem               #证书吊销列表文件

       private_key=  $dir/private/cakey.pem     #CA的私钥文件

       RANDFILE =  $dir/private/.rand           #随机数生产文件,会自动创建

       default_days= 365                        #默认签发有效期

    建立私有CA

    1)、在/etc/pki/CA/private生成CA私钥文件

Linux之加密解密基础、openssl及CA基础应用_CA_06

    注:-out为输出私钥的位置 ;2048为密钥的长度

    2)、在/etc/pki/CA目录下生成自签署证书

Linux之加密解密基础、openssl及CA基础应用_对称、加密、解密、单向_07

    注:-new 为生成新的证书,会要求用户填写相关的信息;–x509通常用于自签署证书,生成测试证书或用于CA自签署;–key私钥位置;–days申请的天数(默认30天);-out生成位置

    3)、创建所需文件:serial序列号文件、index.txt索引文件、crlnumber文件

Linux之加密解密基础、openssl及CA基础应用_CA_08

    4)、假设给http服务器(192.168.2.10)发放证书,其位置为/etc/httpd/ssl,ssl自己创建文件夹,在http上申请证书生成私钥

Linux之加密解密基础、openssl及CA基础应用_CA_09Linux之加密解密基础、openssl及CA基础应用_对称、加密、解密、单向_10

    5)、在CA上给http服务器签署证书(需要书拷贝到CA服务器上,任意位置这里放在/tmp/临时目录下),并回传给http服务器

Linux之加密解密基础、openssl及CA基础应用_CA_11Linux之加密解密基础、openssl及CA基础应用_对称、加密、解密、单向_12Linux之加密解密基础、openssl及CA基础应用_对称、加密、解密、单向_13