在网络诞生的初期,只是单纯的为了满足数据的传输,而没有更多的注重数据的安全问题,就我们所知的telnetftp都是采用明文的方法传输的,这给我们的数据带来了巨大的威胁,在当今互联网迅速发展的今天,这已经得到了部分解决,接下来,我们会介绍互联网上的数据传输过程。

  首先我们先学习几种加密方法,这里主要是对称加密、单向加密、公钥加密

  

  对称加密:

        对称加密是指通信双方使用同样的加密机制,并且使用相同的密钥,发送方使用密钥加密,接收方使用相同的密钥解密。

     对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。

     但是,这种加密方法就要要求我们要事先商量好加密的密钥,而且将之储存,比如说,serverA是一台web服务器,许多用户要到它上面获取数据,进行通信,serverA就得保存所有的密钥的,这对web服务器来说是个挑战,密钥的管理无法解决。

 单向加密:

       该算法对数据部分进行加密,然后提取数据特征码,并将特征码放到数据后边与数据一块传送,如果在传输的过程中被改变,接收方收到时,用该算法重新加密数据,得到的特征码就会与收到时的特征码相差极大

   它有着如下特点:

雪崩效应:哪怕是修改了一个字符,特征码都会发生极大的变化。

定长输出:无论数据有多长,只要我们制定了单向解密的算法,它的特征码是定长的

不可逆:无法根据特征码还原数据

但是,如果,中间的传输过程中,数据被劫去,而且,被更改后的数据的特征码又被重新生成,继续传输,这样接收方收到数据后,单向加密提取的特征码是一致的,其实,数据已经被改了。

    

 公钥加密:

   是一种非对称加密算法,主要作用是用来进行身份验证

     这里要说明一个知识:公钥和私钥

     公钥:是从私钥中提取出来的,可对外公布,常用来加密

     私钥:仅自己知道,且很长,常用来解密

加密流程:

    如何确保接收方拿到的发送方的公钥是没有被更改过的,这里就有了PKI这个组织了,它给他人发送证书,里面包含发送方的公钥,里面有CA的签名,这样,当接收方拿到CA的公钥时,就能验证这个发送方的公钥了。

这是一个互联网数据包传输的过程,我们就简要的说说加密的过程

1、两者通过TCP/IP的三次握手,先建立信道连接

2、 hostAweb服务器通信,并且请求得到web服务器的证书。

3、web服务器回应hostA,先会把自己的证书发过去。

4、hostA得到web服务器的证书,进行解密过程。

   hostA会利用CA服务器的公钥进行解密得到特征码,再对证书进行单向加密,对比特征码,判断证书的正确性,之后提取web服务器的公钥

    然后hostA会利用某种机制,将一串密码发给web服务器,web服务器利用这个密码加密数据。

5、web服务器响应hostA的请求,并返回数据。

    Iweb服务器会将数据先进行单向加密,得到这段返回的数据的特征码,然后再用自己的私钥对特征码进行加密,并附在要传输的数据后,如图:

    II、然后,将得到的新数据,用对称加密进行加密,并得到加密的密码,再把这个密码用对方的密钥进行加密,并附在数据后,如图:

这样,Web服务器就可以把数据返回给hostA

6、hostA接受到web服务器返回的数据

        IhostA先用自己的私钥进行解密,得到对称加密的密码,然后,利用这个密码,对数据进行对称解密,如图:

  IIhostA利用Web服务器的公钥对数据进一步解密,得到真正的数据的特征码,然后,hostA用同样的单向加密算法,对数据进行加密,对比得到的特征码,从而判断数据的正确性

总结:数据的真实性在传输中是一个非常重要的环节,我把整个过程绘成了如下两个图:

加密过程流程图:

解密过程流程图:

OpenSSL搭建私有CA服务器:

 实验拓扑图如下所示:

1、CA服务器生成一对密钥:

[root@localhost ~]#cd /etc/pki/CA/private/   #私钥存放的地点[root@localhost ~]#(umask 077 ;opensslgenrsa -out cakey.pem 2048)   #生成私钥

2、CA自签证书

[root@localhost ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem  -days 365You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:anhuiLocality Name (eg, city) [Default City]:luanOrganization Name (eg, company) [Default Company Ltd]:wlzxOrganizational Unit Name (eg, section) []:opsCommon Name (eg, your name or your server's hostname) []:www.magedu.comEmail Address []:admin@magedu.com

参数解释:

    req:生成证书签署请求

    -new:新的请求

    -key /path/tokey/file:指定私钥文件的位置

    -out /path/to/somefile:生成的请求所存放的位置

    -x509:生成自签署证书

    -days n:有效天数,这里是365天

我们也可以更改配置文件,如下所示:

[ req_distinguished_name ]countryName                     = Country Name (2 letter code)countryName_default             = CN            #指定国家countryName_min                 = 2countryName_max                 = 2stateOrProvinceName             = State or Province Name (full name)#stateOrProvinceName_default    = Default ProvincestateOrProvinceName_default     = anhui         #指定省份localityName                    = Locality Name (eg, city)localityName_default    = luan                   #指定城市0.organizationName              = Organization Name (eg, company)0.organizationName_default      = wlzx            #指定公司名称# we can do this but it is not needed normally :-)#1.organizationName             = Second Organization Name (eg, company)#1.organizationName_default     = World Wide Web Pty Ltd    organizationalUnitName          = ops            #指定部分名称#organizationalUnitName_default =commonName                      = www.magedu.com        #指定主机名,这个必须正确commonName_max                  = 64emailAddress                    = admin@magedu.com       #邮件地址emailAddress_max                = 64

对于此配置文件,我们在搭建服务的时候,可以把它拷贝到任意节点的主机上,这样,生产签署请求的时候,我们所需要填入的信息就是默认值,也不会出错了,也更加快速。

我们要为CA初始化一下工作环境:

[root@localhost ~]#touch/etc/pki/CA/index.txt[root@localhost ~]#touch/etc/pki/CA/serial[root@localhost ~]#echo 1 >/etc/pki/CA/serial

3、节点生成请求:

    I、节点自身要生成密钥

[root@localhost ~]#mkdir /etc/httpd/openssl[root@localhost ~]#(umask 077;openssl genrsa -out/etc/httpd/openssl/httpd.key 2048)

    II、生成证书的签署请求

[root@localhost ~]#opensll req -new -key /etc/httpd/openssl -out/etc/httpd/ssl/httpd.csr#这里也可以修改其配置文件,更改一些默认信息,然后传到各个节点中

    III、   把签署的请求发送给CA服务器

[root@localhost ~]#scp/etc/httpd/openssl/httpd.csr 192.168.10.10:/root

4、CA服务器签署证书:

    I、 验证证书中的信息

    II、签署证书

[root@localhost ~]#openssl  ca  -in /root/httpd.csr  -out httpd.crt -days  365

    III、CA把证书发还给请求的节点

[root@localhost ~]#scp httpd.crt 192.168.10.11:/etc/httpd/openssl/

   这样私有CA服务器的搭建,以及对请求认证的用户签发证书的过程就完成了,获得证书的主机就能在新人的局域网内部使用CA服务器签发的证书了。