所谓的数据加密,就是把明文的数据用算法加密为密文,然后进行存放或传输,保证其安全性。
    数据加密方式:
    1,对称加密
    加密方和解密方共用一个密钥,用算法加密后会产生一个密码,用于对此数据解密。对称加密的速度非常快,适用于加密大容量的数据。
    通常用的加密算法有:

    DES:支持64位的密钥长度

    3DES:用DES加密三次

    AES:DES的替代者,支持128,256,512位密钥长度的加密

    2,公钥加密
    用算法加密数据后,会产生一对密钥,一个是公钥,一个是私钥。公钥加密的数据只有私钥才能解,而私钥加密的数据只有对应的公钥才能解。但是,公钥机制加密的速度是非常慢的,它不用于加密大容量的数据,一只用于密钥交换,即对用对称加密算法生成的密码进行加密。
    常用的加密算法:RSA,DSA,ElGamal
    3,单项加密
    用单项加密算法对数据加密后,会生成一个数据的特征码,这个特征码用于唯一标识这段数据。
    主要应用就是数字签名和验证数据的完整性。
    常见的算法有:MD5:定长输出128位;SHA1:定长输出160位;CRC-32
    而通常一个安全的数据传输过程,要包括以上三种加密方式:
    发送方准备好自己要发送的数据后,用单项加密算法获得一个特征码。然后发送方用自己的私钥对特征码进行加密,把加密过的特征码放在用对称加密算法加密过的数据前面,然后发送方再用接收方的公钥对数据的密码进行加密,最后发送给接收方。接收方,用自己的私钥可以对加密的数据密码进行解密,有了数据密码就可以对数据进行解密了,接收方再用发送方的公钥对数据的特征码进行解密,如果能解密,就说明这段数据是发送方发的,也就实现了数字签名,然后接受方再把数据用单项加密算法计算出一个特征码,用这个特征码和发送方发过来的特征码进行比对,如果相同,就说明这段数据是完整的,没有被修改,这就实现了数据完整性的检验。
     这其中有一个问题?数据的私钥自己存放,但是数据的公钥要发送给对方,这个通过什么来实现呢?
     这就用到了CA(certificate authority)即电子商务认证中心。它是负责发放和管理数字证书的权威机构,作为第三方存在。CA在发证书的时候,会通过实地调查申请者,确定申请者身份后,才会发证。CA证书发行的时候,也要进行数字签名,用CA的私钥加密,用于唯一标识这个CA组织。
     而CA证书中通常包含的内容为:

     1,证书持有者的相关信息

     2,公钥

     3,CA的相关信息

     4,证书的使用方法

 

     

     而怎么计算文件的特征码呢?

     md5sum filename

     用md5计算这个文件的校验码

     sha1sum filename

     用sha1计算这个文件的校验码

     openssl dgst -md5 filename

     openssl dgst -sha1 filename

     指定算法对文件进行校验码计算
 
 
     下面我们来说一下Linux中实现加密的工具openssl:

     openssl有三个重要的库文件:

     1,libcrypto

     加密库,提供加密机制,实现通用的加密

     2,libssl

     保证协议并附加安全机制,如认证安全和传输安全等,并支持传输层安全套接字协议ssl/tls

     3,openssl

     多目标的通用加密,可以生成x.509格式证书,并可以建立一个本地的CA.
 

     openssl的命令用法:

     openssl version

     查看openssl的版本

     openssl cipers

     显示所有常用的算法

     openssl speed md5

     对算法的加密速度进行测试

     openssl ?

     显示openssl可用的指令    

     openssl ca

     用于创建CA

     openssl crl

     用于创建证书吊销列表

     openssl passwd

     用于生成一个经过加密的密码

     openssl genrsa 1024 > mykey.pri

     用于生成经过RSA加密的私钥,并放在mykey.pri这个文件中

     openssl rsa -in mykey.pri -pubout -out mykey.pub

     从私钥信息中提取公钥,保存至mykey.pub这个文件

     openssl rsa -in mykey.pri -des3 -out mykey.cipher

     对私钥进行3DES加密存放至mykey.cipher文件

     openssl rsa -in mykey.cipher -out mykey.sec

     解密这个文件至mykey.sec这个文件
 
 
     制作本地的CA:

     /etc/pki/CA目录,就是CA默认的工作目录

     /etc/pki/tls/openssl.conf   是openssl的配置文件

     /etc/pki/CA/private         存放我们自己建的CA的私钥

    

     cd /etc/pki/tls

     vi openssl.conf

     找到[ CA_default ]行:
     把"dir =  ../../CA"改为"dir = /etc/pki/CA,即把我们CA的工作目录使用绝对路径来定义
    

    cd /etc/pki/CA

   

    (umask 077; openssl genrsa 2018 > private/cakey.pem)  

    创建这个文件,并直接更改它的权限;文件的名字是固定的,配置文件中定义好的,cakey.pem是用于存放CA自己的私钥,CA虽然是授权的发证单位,但自己也要有私钥来实现数字签名,来区分不同的CA
 

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

    会自动提取到公钥,创建cacet.pem这个证书,这个证书是CA本身的证书,格式为x509。以后CA就可以给别人发证了。

    req:申请证书

    -new:表示是新发的申请

    -x509:指定我们的CA证书的格式

    -key:指定一个私钥文件

    -out:从我们知道的私钥中提取公钥信息,并保存至cacert.pem文件中

-days:指定证书的有效期
命令执行之后会出现这些信息让填入:

第一个:我们要创建的CA所在的国家,两个字符
第二个:我们要创建的CA所在的省份
第三个:我们要创建的CA所在的城市
第四个:我们要创建的CA的公司名称
第五个:CA申请者所在的部门
第六个:我们要创建的CA服务器
第七个:我们要创建的CA的邮箱
 
 
 

    mkdir certs crl newcerts

    certs 为所签证书的目录

    crl为 所吊销的证书的目录

    newcerts  要签的新证书的目录

    touch index.txt serial crlnumber

    echo 01 > serial

    echo 01 > crlnumber

    通过这几个步骤,我们创建了CA必须的几个文件,至此我们的CA服务器就建好了
 
 
    我们可以在我们请求发证的主机上,申请证书了:

    (umask 077; openssl genrsa 1024 > httpd.key)

    生成自己的私钥,私钥长度为1024位
    

    openssl req -new -key httpd.key -out httpd.csr

然后从私钥中提取公钥,并生成一个向CA发送的请求文件httpd.csr

第一个:我们要申请的CA所在的国家
第二个:我们要申请的CA所在的省份
第三个: 我们要申请的CA所在的城市
第四个:我们要申请的CA的公司名称
第五个:申请者所在的部门
第六个:申请者要为哪台主机申请证书
第七个:申请者的email
第八个:对这个请求加密,当CA签证的时候要输入密码
第九个:说明申请者是哪个公司的
 
我们把httpd.csr发送到CA的服务上,然后在的CA服务器上签署,命令为:
openssl ca -in htttpd.csr -out httpd.crt  (默认一年)
CA签署这个证书
至此,httpd.crt就是我们的证书了,我们就可以使用了。
   
    注:要了证书httpd.crt和私钥httpd.key,那么我们就可以用他们建立安全的通信连接了