在网络诞生的初期,只是单纯的为了满足数据的传输,而没有更多的注重数据的安全问题,就我们所知的telnet和ftp都是采用明文的方法传输的,这给我们的数据带来了巨大的威胁,在当今互联网迅速发展的今天,这已经得到了部分解决,接下来,我们会介绍互联网上的数据传输过程。
首先我们先学习几种加密方法,这里主要是对称加密、单向加密、公钥加密
对称加密:
对称加密是指通信双方使用同样的加密机制,并且使用相同的密钥,发送方使用密钥加密,接收方使用相同的密钥解密。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。
但是,这种加密方法就要要求我们要事先商量好加密的密钥,而且将之储存,比如说,serverA是一台web服务器,许多用户要到它上面获取数据,进行通信,serverA就得保存所有的密钥的,这对web服务器来说是个挑战,密钥的管理无法解决。
单向加密:
该算法对数据部分进行加密,然后提取数据特征码,并将特征码放到数据后边与数据一块传送,如果在传输的过程中被改变,接收方收到时,用该算法重新加密数据,得到的特征码就会与收到时的特征码相差极大
它有着如下特点:
雪崩效应:哪怕是修改了一个字符,特征码都会发生极大的变化。
定长输出:无论数据有多长,只要我们制定了单向解密的算法,它的特征码是定长的
不可逆:无法根据特征码还原数据
但是,如果,中间的传输过程中,数据被劫去,而且,被更改后的数据的特征码又被重新生成,继续传输,这样接收方收到数据后,单向加密提取的特征码是一致的,其实,数据已经被改了。
公钥加密:
是一种非对称加密算法,主要作用是用来进行身份验证
这里要说明一个知识:公钥和私钥
公钥:是从私钥中提取出来的,可对外公布,常用来加密
私钥:仅自己知道,且很长,常用来解密
加密流程:
如何确保接收方拿到的发送方的公钥是没有被更改过的,这里就有了PKI这个组织了,它给他人发送证书,里面包含发送方的公钥,里面有CA的签名,这样,当接收方拿到CA的公钥时,就能验证这个发送方的公钥了。
这是一个互联网数据包传输的过程,我们就简要的说说加密的过程
1、两者通过TCP/IP的三次握手,先建立信道连接。
2、 hostA向web服务器通信,并且请求得到web服务器的证书。
3、web服务器回应hostA,先会把自己的证书发过去。
4、hostA得到web服务器的证书,进行解密过程。
hostA会利用CA服务器的公钥进行解密得到特征码,再对证书进行单向加密,对比特征码,判断证书的正确性,之后提取web服务器的公钥。
然后hostA会利用某种机制,将一串密码发给web服务器,web服务器利用这个密码加密数据。
5、web服务器响应hostA的请求,并返回数据。
I、web服务器会将数据先进行单向加密,得到这段返回的数据的特征码,然后再用自己的私钥对特征码进行加密,并附在要传输的数据后,如图:
II、然后,将得到的新数据,用对称加密进行加密,并得到加密的密码,再把这个密码用对方的密钥进行加密,并附在数据后,如图:
这样,Web服务器就可以把数据返回给hostA了
6、hostA接受到web服务器返回的数据
I、hostA先用自己的私钥进行解密,得到对称加密的密码,然后,利用这个密码,对数据进行对称解密,如图:
II、hostA利用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服务器签发的证书了。