加密、解密、openssl的基本应用

及CA的实现过程

一、加密、解密技术

   在互联网上数据传输有两种:明文传输和加密传输。明文传输的协议有:ftp、http、smtp、telnet。但是为了数据的完整性和安全性,所以后来引用了加密等相关手段来保证数据的安全和完整性

现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密

1、对称加密

   采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

   

   优点:

       速度快

       加密相对安全

       加密紧凑(不会发生加密前与加密后文件大小相关太大)

   缺点:

       随着参与者数量的增加,密钥数量急剧膨胀((n×(n-1))/2

       因为密钥数量过多,对密钥的管理和存储是一个很大的问题

       不支持数字签名和不可否认性(不能认证数据是否完整,不支持身份认证)

常见的对称加密算法有:

   DES:使用56位的密钥,2000年的时候被人破解了,所以现在基本不再使用

   AES:高级加密标准,可以使用128,129,256三种长度密钥

它:blowfish,Twofish和RC6,IDEA(商业算法),CAST5

2、非对称加密

   非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

   优点:

       安全,因为不必发送密钥给接受者,所以非对称加密不必担心密钥被中途截获的问题

       密钥数目和参与者数目相同,没有复杂的密钥分发问题

       在交换公钥之前不需要预先建立某种信任关系

   缺点:

       加密速度很慢

       密文会变长(例如:若1GB大小文件,加密后会变成1.5GB左右)

       

常见的非对称加密算法有:

             RSA     加密和签名

             DSA     签名

             ElGamal  

非对称加密总结:

   非对称加密长度通常有512,1024,2048,4096位,最常用的就是2048位,长度固然可以增加安全性但是需要花费很长时间来进行加密/解密,和对称加密相比,加密/解密的时间差不多是对称加密的1000倍,所以我们通常用其作为用户认证,用对称加密来实现数据的加密/解密

3、单向散列算法(单项加密)

       又称hash函数,Hash函数(也称杂凑函数或杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一般用于产生消息摘要,密钥加密等。Hash函数主要用于完整性校验和提高数字签名的有效性。

特点:

   输入一样,输出必须相同

   雪崩效应:输入的微小改变,将会引起结果的巨大改变

   定长输出:无论原始数据是多大,结果大小都相同的

   加密过程不可逆,无法根据特征码还原原来的数据

常见散列函数(Hash函数)

       ·MD5:是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;

       ·其它:SHA1,SHA512,CEC-32

       

       下图是帮助我们理解加密算法在Internet上的使用所作的说明:

解释如下,先说BOB和ALICE通信阶段

       黑框A:表示要传输的数据

       黑框B:就是单项加密对这段数据提取的特征码,这段特征码同时运用了非对称加密,具体过程是用BOB的私钥加密,传输给ALICE,只要到达后ALICE能解密,表明对方确实是BOB。这一过程同时起到了用户认证和数据完整性的校验。黑框B又称为数字签名

       红框A:这一阶段会生成一段很长的随机数(密钥)然后配合对称加密算法对黑框A和黑框B加密,但是我们如何把加密的密钥传输给ALICE呢?这就要用到红框B

       红框B:这一阶段是用ALICE的公钥加密这串随机数(对称加密阶段的密钥),ALICE接受到数据后如果能用自己私钥解密,那就证明接受者确实ALICE

加密过程:

       第一步:用单向加密算法提取数据(黑框A)的特征值

       第二步:用自己的私钥加密这段特征值形成黑框B

       第三步:用对称加密算法,对黑框A和黑框B来加密,得到红框A

       第四步:用ALICE的公钥来加密第三步所用的密钥,得到红框B

解密过程:

       第一步:ALICE用自己的私钥解密红框B得到对称加密的密钥

       第二步:用这个密钥解密红框A内容

       第三步:用BOB的公钥解密黑框B,如果能成功,说明发送方确实是BOB,这就完成了身份验证(解密后会得到一串数据的特征值)

       第四步:用同样的单项加密算法来对这段数据提取特征值,如果和第三步的特征值一样,说明这段数据是完整的,这就完成了数据完整性的校验

进行完上述内容厉害的读者会发现一个问题就是BOB和ALICE如何获得对方的公钥,或者说如何证明获得的公钥就是对方,这就需要引入另一方证书颁发机构CA,下面是对证书颁发机构跟BOB/ALICE之间的解释

       黑框C:代表要颁发给BOB/ALICE的公钥,组织,地址等信息

       黑框D:是对黑框C进行单向加密后得到的数字签名,然后用自己的私钥对其加密,传输给BOB和ALICE,拿着这个证书颁发机构的公钥(这些证书颁发机构的公钥一般已经被microsoft事先放在windows里面,当然其他操作系统也是一样的)的BOB和ALICE如果能对这个证书进行解密,说明这个证书颁发机构不是冒充的

       红框E:表示颁发给BOB和ALICE的证书

二、openssl应用详解

   1、安装openssl (默认已经安装)

2、子命令应用

       enc对称加密,des3加密方法, -in指定要加密的文件,-e表示加密,-out指定加密后要保存的位置, -salt 使加密过程更安全, -a 表示输出的结果保存为base64的文本编码格式,不指定会保存为二进制, -d 解密

       加密示例:将/etc/fstab加密并输出到/tmp/fstab.cipoher

       命令:openssl enc -des3 -a -salt -in /etc/fstab -out /tmp/fstab.cipoher

       cat /tmp/fstab.cipoher

       我输入的密码为:redhat

解密示例:还原后内容和原文件一样

命令:openssl enc -d -des3 -a -salt -in/tmp/fstab.cipoher

-out /tmp/fstab.cleartext

另外也可以使用openssl进行单向加密

单向加密:

特性:

                   One-Way

                  Collision-free

算法:

                  md5:128bits

                  sha1:160bits

                  sha512:512bits

工具:sha1sum,md5sum,cksum,opemssl dgst

openssl dgst [-md5|-md4|-md2|-sha|-mdc2|-ripemd160|-dss1] [-outfilename] /path/to/somefile

三、用openssl实现自建CA:

   1、查看配置文件

vim /etc/pki/tls/openssl.cnf

[ 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 #序列号

crlnumber = $dir/crlnumbe #证书吊销列表序列号

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

private_key = $dir/private/cakey.pem #CA自己的私钥

RANDFILE = $dir/private/.rand #随机数文件

x509_extensions = usr_cert

 2、把另外一台服务器172.16.251.45做成CA

在CA服务器172.16.251.45上执行:

       命令:cd /etc/pki/CA

(umask 077;openssl genrsa -out private/cakey.pem 2048) #生成密钥对

               如果想查看公钥:

       openssl rsa -in  private/cakey.pem -pubout -text -noout      

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655              

#生成自签证书

touch index.txt serial crlnumber #建立序列号文件

echo 01 > serial #写入起始序列号

3、配置httpd使用证书

在本机上执行:

       命令:cd /etc/httpd #web服务器的配置目录

           mkdir ssl

           cd ssl #每一种服务要想使用证书,必须有私钥,每一种应用都需要自己的证书

           (umask 077; openssl genrsa -outhttpd.key 1024#给自己生成密钥

           openssl req -new -key httpd.key -out httpd.csr #生成证书签署请求文件,机构和其他名字必须和CA颁发机构上的一样

   scp httpd.csr 172.16.251.45:/tmp #将请求文件发给CA

    openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3655 #CA服务器签名,签名以后才可以使用

CA服务器上执行:

   cd /tmp

           scp httpd.crt 172.16.251.111:/etc/httpd/ssl/ #将签名后的请求文件传回去

   

   另外如果需要吊销证书:

        # openssl ca -revoke/path/to/somefile.crt  (谨慎使用)