随着计算机技术的不断发展,新的存储方式、新的网络结构将层出不穷,相应的商务应用环节也会发生翻天覆地的变化,紧随其后的安全问题也会“穷追不舍”。虽然我们可以通过各种技术相应提高企业应用的安全性,但这些技术统统基于密码学理论。同样,密码学并不是固若金汤般的坚不可摧,密码学的破解每一天都有发生。我们应当合理使用各种安全技术,使其有机结合、优势互补,确保企业应用具有更高的安全性。

本博文主要介绍数据加密解密过程与搭建私有CA流程。

专业术语:

    明文(Cleartext,Plaintext):最初要发送的原始信息,可以是文本文件、图片文件、二进制数据等。  
    密文(Ciphertext):被加密信息转换后得到的信息。    
    加密(Encryption):将明文转换为密文的过程。基于数学方法的程序和保密的密钥对信息进行编码,把计算机数据变成一堆难以理解的字符串。    
    解密(Decryption):加密的逆过程,将密文转换为明文的过程。    
    算法(Algorithm):加密或解密时所采用的一组规则。    
    密钥(Key):在加密(或解密)过程中使用的可变参数称为密钥。    
    加密算法(Encryption Algorithm):指将明文转换为密文的算法。    
    加密密钥(Encryption Key):指通过加密算法进行加密操作用的密钥。    
    解密算法(Decryption Algorithm):指将密文转换为明文的算法。    
    解密密钥(Decryption Key):指通过解密算法进行解密操作用的密钥。

密码算法和协议:    
    对称加密、    公钥加密、    单向加密、    认证协议:    

对称加密算法    
        对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法    
        简介:    
            数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。    
        收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。    
        在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。    
         数据加密解密过程与搭建私有CA流程_数据加密

      加密过程:    
            A和B通信,双方会先协商共用哪一密钥,之后A用某一算法和协商好的密钥去加密数据发给B;    
            B收到数据后也用同一算法和协商的密钥便可将数据还原成明文。在这个过程中最大的难题就是如何将密码安全的告知另一方即密钥交换的问题。

       用于此机制的算法:DES(56)、3DES、AES (128,192,256,384,512)、Blowfish、Twofish、RC6、IDEA、CAST5    
        
       特性:    
            1、加密、解密双方使用同一口令(密钥);    
            2、加密速度快,分隔成固定大小的块,逐个进行加密    
       缺陷:    
            1、密钥过多(若一方和多方通信会需要存储多个密码);    
            2、密钥传输交换(交易双方都使用同样钥匙,安全性得不到保证);

            密钥交换、身份验正、数据完整性  

公钥加密    
        也叫非对称(密钥)加密(public key encryption)    
        公钥加密就是密码的生成是成对的,即公钥加密的数据只能用与之匹对的私钥才能解密;而私钥加密的数据也只能用与之匹对的公钥才能解密。    
        而且要清楚的是公钥是可以公开的但私钥是不成公开的只有生成密钥对的人才有否则安全性荡然无存。

数据加密解密过程与搭建私有CA流程_数据加密_02

        密钥:public key, secret key  
            p/s

        公钥:其密钥长度

            身份认证:  
            密钥交换

        常用于此机制加密算法:    
            RSA、 DSA、EIGamal    

        优点:可用于密钥的交换和数字签名    
        缺点:不适合加密数据因速度太慢;此机制无法解决的难题是无法确定得到的公钥就是对方的

        实现密钥交换同时又可加密的过程:    
        A先生成一个对称密钥然后用此密钥加密要发给B的数据,在再已加过密的数据的后面附上用B的公钥加密的密钥然后发给B;

B收到数据后先用自己的私钥解密出密钥再用密钥将数据还原成明文;    之后B也采用此方式与A通信。

这样就很好的避免了密码交换的问题但是又出现的问题是无法保证得到的公钥就是要通信方的公钥    用对方的公钥加密对称密钥这样只有对方的私钥可以解密这样就很好的实现了密码交换  
而用自己的私钥加密某数据的特征码便很好的实现了数字签名    

单向加密:    
        是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。    
        单身加密一般用于数据库中用户信息的加密。当用户创建一个新的账号或者密码时,他的信息不是直接保存到数据库中,而是经过一次加密以后再保存,这样即使这些信息被泄露,也不能立即得知这些信息的真正含义。    
    特点:    
        定长输出:不管加密的数据多长都会定长输出    
        雪崩效应:数据微小的变化就会导致结果的巨大变化    
        不可逆转:无法将得到的数据在逆着解密;

    算法:MD5、SHA1、SHA256、SHA384、SHA512    


数据加密与解密过程

数据加密解密过程与搭建私有CA流程_计算机技术_03

图片来源于http://xxrenzhe.blog.51cto.com/4036116/1370114

加密过程:    
   1、使用单向加密算法加密明文数据,生成一个特征码。保证了数据的完整性。    
   2、Bob用自己的私钥加密特征码,附在明文数据后面(使之成为一个新数据),保证了身份认证。    
   3、Bob利用对称加密算法对所有的数据加密。    
   4、Bob再用Alice的公钥(通过可靠的手段获取,第三方认证机构CA)对生成的密钥进行加密。

解密过程:    
   1、使用Alice的私钥先解密获取密钥。    
   2、用得到的密钥去解密加密了的数据和特征码。    
   3、使用Bob的公钥去解密特征码,得到在Bob发送数据的特征码。    
   4、Alice用同样的加密算法去计算数据的特殊码    
   5、再比较3,4步中的特征码是否一致。

三种算法结合,以实现可靠的通信(保证数据的完整性,私密性,用户认证)

在上面的介绍中,虽然用到了众多加密算法,但公钥是在网络中传输,双方无法验证其可信度,则需要第三方权威认证机构(CA)才能保障

使用Openssl搭建私有CA流程

常见文件后缀名的命名:    
    .key格式:私有的密钥    
    .crt格式:证书文件,certificate的缩写    
    .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写    
    .crl格式:证书吊销列表,Certificate Revocation List的缩写    
    .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式    

openssl建立私有CA:  
1、生成密钥    
2、自签署证书


节点:    
     1、生成密钥对儿    
     2、生成证书签署请求    
     3、把请求发送给CA

CA:    
     1、验正请求者信息;    
     2、签署证书;    
     3、把签好的证书发送给请求者;


一、建立CA服务器:    
1、生成密钥    
    # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

1 # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2 Generating RSA private key, 2048 bit long modulus
3 ......+++
4 .........................................+++
5 e is 65537 (0x10001)

2、自签证书  
    # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

    req: 生成证书签署请求  
        -news: 新请求  
        -key /path/to/keyfile: 指定私钥文件  
        -out /path/to/somefile:  
        -x509: 生成自签署证书  
        -days n: 有效天数

 1 # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/ 
 2 CA/cacert.pem -days 3650 
 3 You are about to be asked to enter information that will be incorporated 
 4 into your certificate request.
 5 What you are about to enter is what is called a Distinguished Name or a DN. 
 6 There are quite a few fields but you can leave some blank 
 7 For some fields there will be a default value, 
 8 If you enter '.', the field will be left blank. 
 9 -----
 10 Country Name (2 letter code) [XX]:cn                          #国家
 11 State or Province Name (full name) []:hn                      #省份
 12 Locality Name (eg, city) [Default City]:zz                    #市区
 13 Organization Name (eg, company) [Default Company Ltd]:luo     #组织名称
 14 Organizational Unit Name (eg, section) []:tech                #部门
 15 Common Name (eg, your name or your server's hostname) []:stu19.magedu.com        #服务器名称
 16 Email Address []:luo@magedu.com                                #邮件地址

3、初始化工作环境  
    # touch /etc/pki/CA/{index.txt,serial}  
    # echo 01 > /etc/pki/CA/serial

1 # touch /etc/pki/CA/{index.txt,serial}
2 # echo 01 > /etc/pki/CA/serial

二、节点申请证书:

(一) 节点生成请求  
    1、生成密钥对儿  
    # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

本文中,CA和节点在同一台主机

1 mkdir /etc/httpd/ssl
2 cd /etc/httpd/ssl
3 # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
4 Generating RSA private key, 2048 bit long modulus
5 ...............+++
6 ......................................................+++
7 e is 65537 (0x10001)

    2、生成证书签署请求  
    # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

 1 # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr 
 2 You are about to be asked to enter information that will be incorporated 
 3 into your certificate request. 
 4 What you are about to enter is what is called a Distinguished Name or a DN. 
 5 There are quite a few fields but you can leave some blank 
 6 For some fields there will be a default value, 
 7 If you enter '.', the field will be left blank. 
 8 ----- 
 9 Country Name (2 letter code) [XX]:cn
 10 State or Province Name (full name) []:hn
 11 Locality Name (eg, city) [Default City]:zz
 12 Organization Name (eg, company) [Default Company Ltd]:luo
 13 Organizational Unit Name (eg, section) []:tech
 14 Common Name (eg, your name or your server's hostname) []:test19.magedu.com
 15 Email Address []:
 16 
 17 Please enter the following 'extra' attributes
 18 to be sent with your certificate request
 19 A challenge password []:
 20 An optional company name []:

    3、把签署请求文件发送给CA服务  
    # scp  httpd.csr UserName@IP:/path


(二) CA签署证书  
    1、验正证书中的信息;  
    2、签署证书  
    # openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N

 1 # openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 300 
 2 Using configuration from /etc/pki/tls/openssl.cnf 3 Check that the request matches the signature 
 4 Signature ok 
 5 Certificate Details: 
 6         Serial Number: 1 (0x1) 
 7         Validity 
 8             Not Before: Aug  1 07:51:51 2014 GMT 
 9             Not After : May 28 07:51:51 2015 GMT
 10         Subject:
 11             countryName               = cn
 12             stateOrProvinceName       = hn
 13             organizationName          = luo
 14             organizationalUnitName    = tech
 15             commonName                = test19.magedu.com
 16         X509v3 extensions:
 17             X509v3 Basic Constraints: 
 18                 CA:FALSE
 19             Netscape Comment: 
 20                 OpenSSL Generated Certificate
 21             X509v3 Subject Key Identifier: 
 22                 CC:E6:26:6D:B1:EB:23:F6:7D:2E:47:82:3D:3D:C4:02:76:6C:31:DE
 23             X509v3 Authority Key Identifier: 
 24                 keyid:26:E7:D9:94:88:D4:2F:88:D2:AF:2C:C1:9A:B9:26:5E:D9:F1:E2:62
 25 
 26 Certificate is to be certified until May 28 07:51:51 2015 GMT (300 days)
 27 Sign the certificate? [y/n]:y
 28 
 29 
 30 1 out of 1 certificate requests certified, commit? [y/n]y
 31 Write out database with 1 new entries
 32 Data Base Updated

    3、发送给请求者;

1 [root@stu19 pki]# ls /etc/httpd/ssl/httpd.
2 httpd.crt  httpd.csr  httpd.key