浅谈Openssl与私有CA搭建

    随着网络技术的发展、internet的全球化,信息共享程度被进一步提高,各种基于互联网的应用如电子政务、电子商务日益增多并愈加被人们工作和生活依赖。但是,由于互联网的开放性和通用性,网络上的信息是对所有人公开的,这就使网络上的数据传输过程中存在被窃听、篡改等安全隐患,并极有可能给用户带来不可估量的损失。为此,各种保证数据在互联网上安全传输的机制纷纷出现,而OpenSSL(Sercure Socket Layer)技术就是其中之一。

    什么是SSL?

    SSL(Sercure Socket Layer)  由于数据在传输层和网络层传送以及封装均已明文方式存在,不能加密,而应用层只能对数据本身加密不能保证数据传过程中的安全,SSL则是工作在TCP/IP协议与应用层协议之间,实现数据传输的安全和数据完整性的一种协议。该协议能通过多种加、解密方式结合证书机制来完成安全认证、访问控制、数据保密性、数据完整性和通讯的不可否认性等功能。而OpenSSL则是SSL的开源实现。

    数据的加密、解密

    根据密码算法和协议,数据的加密、解密方式可以分为四类:

      1、对称加密   所谓对称加密是指通信的双方使用同一个密钥来进行加解密。算法使用DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等,使用该加密方式的客户端,对每一个通讯对象都要维护一个密钥并且无法保证密钥交换、身份验证和数据完整性验证,并且易于受到基于字典穷举方式攻击。

      2、非对称加密 又称公钥加密。使用此种加密方式通讯方会通过算法生成成对存在的私钥和密钥,使用私钥加密的数据只能用自己的公钥解密,反之亦然。因此可以以较为公开的方式将公钥传送给通讯对方,而对方可以通过是否能使用此公钥来解密相应的数据信息来验证通讯方的身份,完成网络通讯安装的身份验证。该加密方式使用的算法有RSA(用于加密和身份验证)、DSA(只能实现身份验证)EIGamal等,由于这些算法的密钥位数过长(一般都是2048位及以上),因此一般不用于加密数据,只是用于身份验证。

      3、单向加密   又称数据完整性校验加密方式,可以利用算法计算数据指纹信息,此种方式得出的数据指纹信息具有定长和雪崩效应(数据中的微小变化将会导致数据指纹信息的巨大变化)的特性,常用来实现数据完整性的验证。

    网络数据传输的加密、解密过程

         blob.png

    如上图场景,加密解密过程如下:

         第一步,用户B向服务器A发起访问请求,并携带自己的证书信息。

         第二步,服务器A收到用户B发来的证书后,查找系统内置或通过其它可靠途径获得证书公钥解密(非对称加密)证书的签名信息,完成CA的合法身份验证,并得到签名信息的特征码,而后使用同样的算法提取签名信息的特征码与之对比,完成签名信息的完整性校验。随后从用户B中发来的证书中提取用户B的公钥信息,最后将自己的证书发送给用户B。

         第三步,用户B收到服务器A发来的证书,使用与之同样的证书验证流程验证证书的合法性以及完整性,提取服务器A的公钥信息。

         第四步,服务器A将需要发送给用户B的数据分段后通过以下步骤对其进行加密(以数据段S0为例进行详解):

                 1、使用单向加密算法,提取数据的SO的特征码信息。 #用到单向加密

                 2、使用自己的私钥加密上一步提取出来的特征码信息,而后将其附在数据S0后面,组成数据段S1。#用到公钥加密

                 3、通过算法生成密钥,利用对称加密对数据段S1进行加密,生成加密后的数据段S2。#用到对称加密

                 4、使用用户B的公钥将上一步生成的密钥加密后将其附在数据段S2后面,生成数据段S3。最后将S3发送给用户B。#用到公钥加密

         第五步,用户B收到服务器A发来的数据段S3后通过一下步骤进行解密:

                 1、使用自己的私钥解密数据段S3,得到服务器A生成的对称加密密钥和数据段S2。#使用公钥加密和对称加密完成密钥交换

                 2、使用上一步解密得到的密钥解密数据段S2得到加密后的数据特征码(由服务器A通过单向加密基于数据段SO提取而得)和明文数据段S0。

                    #用到对称加密

                 3、使用自己的私钥解密上一步得到的数据特征码,然后使用与服务器A相同的单向加密的算法提取明文数据S0的特征码与之比对,比对结果正确则说明数据时完整的。#通过单向加密和公钥加密同时完成整数据完整性认证和身份验证

    PKI 公钥基础设施

    通过上面的详述,我们已经对网络数据传输加密解密的过程有了清晰的认识,而这个过程中的关键之处即通讯双方公钥(证书)的获取是要依赖于PKI这个服务平台来实现的,下面来详细的了解一下它。

      PKI(Public Key Infrastructure) 公共基础设施,是一种提供公钥加密和数字签名的平台,目的是为了管理密钥和证书。一个完整的有效的PKI由如下组成部分:

         1、认证机构CA       数字证书的申请及签发机关,CA必须具备权威的特性。

         2、数据证书库      用于存储已签发的数据证书和公钥,用户可由此获得所需的其他用户的证书以及公钥。

          3、密钥备份和恢复系统 为防止用户解密密钥丢失造成数据无法解密而存在,此功能必须由可信机构完成,并且密钥备份只备份解密密钥,签名密钥为保证其唯一性不做备份。

          4、应用接口(API) 为方便用户使用加密、数字签名等安全服务而提供的良好的应用接口,使得各种应用能以安全、一致可信的方式与PKI交互,确保网络环境的完整性和易用性。

          5、证书作废系统    PKI的必备组件,用来作废那些由于于用户密钥丢失、证书过期、以及证书持有者身份变更等导致证书信息已不可用的证书。

       CA     

       通常来说,CA是PKI系统的核心,为实现证书发放、证书更新、证书撤销和证书验证等功能,CA由以下几个部分组成:

          1、注册服务器:用于实现客户在网上提出证书申请和填写证书相应的证书申请表。

          2、证书申请受理和审核机构:用来接受客户的证书申请并进行审核。

          3、认证中心服务器:用于数字证书的生成、发放,提供发放证书的管理、证书吊销列表的生成和处理。

       具体实施时,CA要做以下工作:

          1、验证并标识证书申请者的身份。

          2、确保用于证书签名的公钥加密密钥对的保密性。

          3、确保签名过程的安全性,确保签名私钥的安全性。

          4、证书资料(证书序列号、CA标识等)的管理。

         5、确保并检查证书的有效期。

          6、确保数字签名证书的唯一性。

          7、及时更新并发布证书吊销列表。

          8、维护证书签订过程的日志记录。

          9、将证书发送给申请人。 

      数字证书的通用格式为X509格式,其证书结构如下图:

          blob.png

    OpenSSL

   在我们的linux平台上,加密和解密、PKI以及CA等一系列的保证网络数据安全传输的机制,都是通过openssl这个开源的工具来实现的,因此能深刻的了解它对于学习后面的高级相关应用是至关重要的。

   执行yum -y install openssl,安装完成后,我么可以通过rpm -ql openssl来查看其安装后生成的、比较常用的路径和文件。如下图

   blob.png

   openssl是一个多用途的命令行工具,可以调用子命令分别实现加密、解密,创键私有CA以及CA管理的功能。

    blob.png

    openssl的用法

    1、查看openssl版本号 使用openssl version

    blob.png

    2、对称加密

     工具 openssl enc  算法DES 3DES AES Blowfish Twofish RC6 IDEA CAST5等。

     用法 openssl enc

              -e 加密操作

              -d 解密操作

              -ciphername 指定算法 

              -a 指定基于base64编码处理数据

              -in /path/from/somefile 指定需要加密的文件的

              -out /path/to/somefile 指定文件加密后存储位置

              -salt 添加字符串增加密码强度

    例:将/var/log/messages拷贝至/tmp/下使用DES算法进行加密解密,并使用cat查看验证。

       blob.png

      加密并验证 

       blob.png      

      解密并确认

    3、单向加密

      工具 openssl dgst,md5sum,sha1sum,chsum 

         openssl dgst -[md5|sha1] [-out /path/tosomefile] /path/form/somefile

             – [md5|sha1] 指定算法

             -out /path/to/somefile 将提取的特征码信息保存到指定文件,不指定输出到屏幕

                /path/from/somefile 指定需要执行单项加密的文件

     例:将/var/log/messages拷贝至/tmp/下,分别使用openssl dgst -md5 和md5sum对其进行单向加密

       blob.png

    4、加密用户密码

      openssl passwd -1 -salt SALT SALT一般是8位的字符串 (-1 指定使用md5进行加密,CentOS 6 一般使用sha512)

     例:

      blob.png

     其中-salt后面的字符串可以使用随机获取字符来替代,

      openssl 随机生成字符串 

      openssl rand [-hex|-base64] number (number指定生成随即字符串的位数)

              -hex 指定十六位编码模式

              -base64 指定base64编码模式

     例:blob.png

     5、公钥加密

      生成密钥 openssl genrsa -out /path/to/keyfile number 

      例:

      blob.png

     提取公钥信息 

           openssl rsa -in /path/from/privat_keyfile [-out /path/to/pub_keyfile] -pubout 如果-out选项不指定则输出结果到屏幕


     blob.png

    6、搭建私有CA

    由于证书的注册费用相当昂贵,而有时候我们只是需要在公司内部或VPN相连的虚拟内网中利用CA认证来管理服务器资源,这个时候我们就可以利用openssl来搭建私有的CA服务器,用以签名、颁发证书,管理已签名证书和已吊销证书等。

    首先,配置服务器端 

          第一步,配置CA服务器的主配置文件,设定默认私有CA配置信息。

          blob.png

          blob.png

          第二步,初始化CA环境,在/etc/pki/CA/下建立证书索引数据库文件index.txt和序列号文件serial,并为证书序列号文件提供初始值。

          blob.png

          第三步,生成密钥,生成自签署证书。

           生成密钥并保存到/etc/pki/CA/private/cakey.pem

          blob.png

          生成根证书

          命令 openssl req 常用的选项如下

                      -new  生成新证书请求

                      -x509 特指生成根证书 而不是证书请求

                      -key /path/from/file_key.pem  指定生成的密钥文件(根证书必须是/etc/pki/CA/private/cakey.pem, 主配置文件中已定义)

                      -out /path/to/file_cert.pem   指定根证书的名字以及存放路径(必须是/etc/pki/CA/cacert.pem,主配置文件中已定义)

                      -days 证书的有效期限

          本CA的根证书创建:

          blob.png

         至此,CA搭建完毕。

    7、这台虚拟服务器配置了http服务,我们可以来为http服务器申请证书,并在本机签名证书来验证CA。

         第一步,创建目录/etc/httpd/ssl用来存放密钥文件和证书申请文件;创建密钥文件和证书申请文件

         blob.png

         第二步 签署,证书,由于节点和CA都在同一台主机,因此可以直接签署

              证书签署命令openssl ca -in /path/from/somefile.csr -out /path/to/somefile.crt -days -in指定证书请求文件,-out指定证书生成文件以及路径

         blob.png

      验证index.txt和serial序列号更新

        blob.png

    8、同样以http服务器为例,以一台主机作为节点验证私有CA

         第一步,创建目录/etc/httpd/ssl用来存放密钥文件和证书请求文件、证书;创建密钥文件、创建证书请求文件。

         blob.png

         第二步,将证书请求文件发送给CA;CA签完证书后将证书发送给节点主机

         节点与CA间的文件发送,使用scp (sercure cp)命令

         scp /path/from/somefile x.x.x.x:path/ (其中x.x.x.x是主机IP地址)

        blob.png

        已发送到CA主机,到CA上去签署证书

        blob.png

         CA签署完证书,并将证书发送回节点/root下,节点可以自定义存放至/etc/httpd/ssl/下。

        blob.png

       上图验证信息库。

    9、吊销证书

        把第8部分申请的证书吊销,用来验证吊销列表

        第一步,查看证书的序列号

        openssl x509 -in /path/from/certficate_file.crt -noout -serial -subject

                 x509 指定证书类型

                 -in /path/from/certficate_file.crt 指定需要吊销的证书

                 -noout 不输出多余信息

                 -serial 输出序列号 

                 -subject 输出摘要信息

       blob.png

       CA上查看index.txt比对subject信息

       blob.png

       第一次执行证书吊销要创建吊销列表文件,并传递初始值,然后吊销证书

       blob.png

       吊销证书

       openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem(SERIAL.pem是需要吊销的证书的序列号对应的证书文件)

       blob.png

      更新并生成吊销列表

      blob.png

      查看吊销列表

      openssl crl -in /path/from/some.crl -noout -text 

                  -in /path/from/somefile.crl 指定吊销列表文件

                  -noout 不输出额外信息

                  -text  文本显示

      blob.png

    如有错误之处,敬请指正!

      

     

      

       

       

             

               

            

           

                 

                      

                    

           

           

                

    

 

    

    








  

    

原创文章,作者:Silently,如若转载,请注明出处:http://www.178linux.com/4879

(0)
SilentlySilently
上一篇 2015-06-04
下一篇 2015-06-05

相关推荐

  • linux 文件权限以及用户策略 讲解

     linux 文件权限以及用户策略 讲解    由于linux系统是一个多用户使用的系统,对于各个用户指定的文件或目录必须存在一套管理系统,以防止多用户对相同文件的混淆使用。于是催生出了linux系统文件的用户权限设置。其存在的意义就是每一个文件或目录对于不同的用户区分读取,写入,执行三种权限,即:r,w,x。下面将详…

    Linux干货 2016-08-05
  • 文件元数据信息详解

    文件元数据信息详解 文件的元数据是什么? 文件的数据分为两类:一类为数据,即文件的实际内容;另一类为元数据,用来描述文件的特征。 元数据内容: 文件名 文件大小 文件所在数据块 数据块的大小 文件类型 文件所在的Inode 硬链接次数 权限 属主id 属组id 最近一次访问时间戳 最近一次更改文件内容的时间戳 最近一次更改文件元数据的时间戳 查看文件的元数据…

    Linux干货 2017-07-09
  • Linux基础学习总结(一)

    一、计算机的组成与功能 二、Linux的版本 三、Linux的哲学思想 四、Linux基础命令(一) 五、Linux帮助信息 六、Linux目录结构

    Linux干货 2016-09-20
  • Linux网络管理之网卡别名及网卡绑定配置

    在日常的运维工作当中,有时候需要在一块物理网卡上配置多个IP地址,这就是网卡子接口的概念,以及多块网卡实现网卡的绑定,通俗来讲就是多块网卡使用的一个IP地址,下面我来详细说明实现的过程。 &创建网卡子接口 在CentOS系统当中网络是由NetworkManager这个服务来管理的,它提供了一个图形的界面,但此服务不支持物理网卡子接口的设置,所以在配置网卡子接…

    系统运维 2016-09-02
  • haproxy 监控配置

    方法一:在defaults段增加如下配置: stats refresh 30s #统计页面自动刷新时间stats uri /stats #统计页面urlstats realm baison-test-Haproxy #统计页面密码框上提示文本stats auth admin:admin123 #统计页面用户名和密码设置stats hide-version #…

    Linux干货 2018-03-19
  • LAMP系列之(php-fpm模式)分布三台机器部署

    LAMP系列之(php-fpm模式)分布三台机器部署 现在我们需要做一个实验,就是把apache , php-fpm , mariadb ,分别安装在3台机器上,协同工作具体如下: 192.168.42.150 apache 192.168.42.151 php-fpm 192.168.42.152 mariadb 关闭防火墙 关闭selinux 分别给这3…

    Linux干货 2017-06-03