码迷,mamicode.com
首页 > 系统相关 > 详细

Linux中加密和解密技术及CA认证

时间:2016-04-09 01:49:48      阅读:496      评论:0      收藏:0      [点我收藏+]

标签:网络安全   服务端   构建ca   linux   应用层   

网络安全通信:

         为了不让自己的隐私,信息等随随便便就能让获取,所以需要对数据进行加密处理,保证数据在传输的过程中不被别人获取,网络通信安全需要达到以下三个目的:

                          1、数据的保密性

                          2、数据的完整性

                          3、来源的合法性

          解决网络安全通信的方案:

             SSL:Secure Sockets Layer  安全的套接层,位于应用层和传输层之间,为数据通信提供安全支持,可在服务端和客户端同时支持一种加密算法。目前版本SSLV2,SSLV3(常用)。

                           HTTP调用SSL协议就变成HTTPS,多了层加密解密功能。

      SSL协议分为两层:

           1、 SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据分装、压缩、加密等基本功能的支持。

           2、 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

加密解密技术:

          对于传统的加密方法:比如替代加密算法、置换加密方法             对于现代的加密方法:现代块加密方法

                   加密:明文通过一定算法和密钥转换成密文

                   解密:密文通过一定算法和密钥还原成明文

也可通过安全服务来防止别人获取:

       认证机制:比如CA

       访问控制机制

一、先说一说加密技术:

              密钥是什么:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数,“秘密的钥匙”

     1)、对称加密:  加密解密使用的都是同一个密钥, 将原始数据分隔成固定大小的块来进行逐个加密,可以实现数据传输的完整性。

                                 缺陷:导致密钥过多,密钥分发困难 

             用到的算法:

                                 DES,3DES,AES,Blowfish,twofish

     2)、公钥加密:密钥被分为公钥和私钥,并成对出现。用公钥加密的数据,只能用与之配对的私钥解密,反之亦然,可以实现数据的保密性

                          公钥:从私钥中提取,可公开给所有人

                         私钥:通过工具创建,使用者自己留存,必须保证其私密性

      用到的算法:

                               RSA:既能签名又能解密

                               DSA:数字签名标准,不能加解密

           

            用途:

                     数字签名:主要在于让接收方确认发送方的身份

                     密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方

                     数据加密:

   3)、单向加密: 只能加密、不能解密,即提取出数据的特征码,可以实现数据的完整性。

                  特性:定长输出,雪崩效应(微小变化产生巨大反应)

                           只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。单项加密还有一个特点就是无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的.

           用到的算法:

                         MD5,128bits 

                         sha1, sha224,sha256,sha384,sha514


  那这些加密技术如何在互联网上应用呢?

          技术分享

        C表示要传输的数据;

        B表示用单向加密得到的特征码,并用公钥加密技术,Clien端用自己的私钥再去加密这段特征码,生成数字签名;

        A表示对称加密所得的密钥,使用一大串随机数配合对称加密技术转成密钥;

        D表示对称密钥 ,Clinet使用Server的公钥去加密这段密钥

              B和D都实现了身份验证的功能,B还完成了数据完整性的校验。

                   如果Server端能用Clinet的公钥去解开B,那就表示数据确实是Client传送过来的,并使用单向加密技术在对这段数据进行提取特征码,然后对比确认数据的完整性。如果Server能用自己的私钥去解密D,那么表示接收端确实是Server.

 具体实现过程:

     加密:先对数据(C)进行单向加密,取出其特征码,并用Clinet端的私钥去加密这段特征码(B),附加在数据的前面或者后面,然后使用对称加密算法去加密整段的数据和特征码,得到一个密钥(A),使用Server端的公钥去加密这段密钥,得到一个对称密钥(D),然后发送给Server端。

     解密:先用自己的私钥去解密对称密钥(D),然后使用密钥去解开A,在使用Client的公钥去解密B,如果能解密,表示确实是Client发送过来的,实现了身份验证功能,对这段数据提取特征码,如果相同,数据完整性也得到了校验。

 

 那双方如何获取对方的公钥呢?并确定公钥就是对方的,而不是别人冒充?这就需要一个信赖的认证机构去(CA)帮助双方存放公钥并发送给对方。

CA会先用自己的私钥生成一个自签证书。

如果Client端需要属于自己的证书,那么就像CA机构申请,CA会分配一个公钥并绑定身份和地址等信息,然后把CA的自签证书绑定在分配给Client的证书上,如果Client能够用CA的公钥去解密CA的证书,证明CA不是冒充的。

如果Server端想知道发送端的公钥,发送端就会发送自己的证书给服务端,服务端用CA的公钥去解密自签证书,如果能解开,那就表示该证书是有效的,里面的公钥那就是发送端的公钥了。


SSL的四次握手:

        技术分享


PKI : 公钥设施基础

    支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施,提供一个公钥加密和数字签名的服务的系统或平台。                   结构:

                   签证机构:CA

                          注册机构:RA

                          证书吊销列表:CRL

                          证书存取库:

        

     通过Openssl去构建私有CA的步骤:

           先了解下Openssl生成文件名后缀的格式:           

                      .key格式:私有的密钥

                      .crt格式:证书文件,certificate的缩写

                      .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写

                      .crl格式:证书吊销列表,Certificate Revocation List的缩写

                      .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

          Openssl的组成部分:                       

           libencrpto:用于加密解密的库         主要由开发者使用

                     libssl:    用于实现SSL安全通信的库    主要由开发者使用

                     openssl多用途命令行工具:                   

                                 众多子命令,分为三类:

                                       标准命令

                                       消息摘要命令(dgst子命令)

                                       加密命令(enc)

    如何用Openssl命令来加解密数据:

                1、对称加密:

                            工具:openssl enc            算法:DES,DES3                    

[root@localhost tmp]# openssl enc -e -des3 -a -salt -in fstab -out fstab.key  
enter des-ede3-cbc encryption password:                  //加密密码
Verifying - enter des-ede3-cbc encryption password:        
[root@localhost tmp]# cat fstab.key 
U2FsdGVkX1/qLxuSRmTs4zQq+jOozKNyXSTiwtMwFumbx/g0Xc+73Xa5WfdHKAfu
iVM89DgSmU4G14thDfUIKi5mfkjT8dQq5Ulkd62qDBSwAAaMpjl2PnlN0M6wlyEr
B9VJZgqH0s9c32nFVbxJK1MrXf+cZTcpjTtf+tSKNYft/zsEBQ9NEGq+bim86w8z
QkAWftAhUf/K2KK/yBsOV4/X+MankdPZLnOAkhx3N2nkqMmjP3aTIxGurqh8mizK

# openssl enc:加解密工具  -e:表示加密 -des3:指明算法 -in:指明要加密的文件  -out:指明要加密后保存的文件
[root@localhost tmp]# openssl enc -d -des3 -a -salt -in fstab.key -out fstab.cobb 
enter des-ede3-cbc decryption password:                 //输入刚才设置的密码
[root@localhost tmp]# cat fstab.cobb 

#
# /etc/fstab
# Created by anaconda on Fri Mar 11 17:27:56 2016
#

# openssl enc:加解密工具  -d:表示解密 -des3:指明算法 -in:指明要解密的文件  -out:指明要解密后保存的文件

     2、单向加密

                    工具:openssl dgst,md5sum,sha1sum,sha224sum,...                    

[root@localhost tmp]# openssl dgst -md5 fstab      //提取文件的特征码
MD5(fstab)= 4934acd8fee79d5768d6954f0affe1c6

     3、公钥加密:

                 三种功能:

                          加密解密

                                 支持算法:RSA,ELGamal

                                 工具:openssl rsautl,gpg

                          数字签名

                                算法:RSA,DSA,ELGamal

                                工具:openssl rsautl,gpg

                          密钥交换

                                 算法:DH        

   生成私钥:

[root@localhost tmp]# (umask 077;openssl genrsa -out fstab 1024)   //用openssl生成私钥
Generating RSA private key, 1024 bit long modulus         // -out:表示私钥存放位置
.......................................++++++          //也可以重定向  >/path/to/somefile
.......++++++
e is 65537 (0x10001)                                   // 1024指定加密多少字节,只能是2^n
[root@localhost tmp]# cat fstab
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCectC07s6vPFpCwyJecnNMEBuoMgPExIQK20jCwGzY+wq7B5pX
dDag9XjGQ2dwyPLqQOzzZBit4u37Hn/nt+UpY2jJwwhvLOzuQiETp046U4D28GiD

注意:私钥的权限只限自己读取,属组或者其他都没有任何权限,()表示是在子shell中运行,不影响当前shell的umask值。
[root@localhost tmp]# (umask 077;openssl genrsa -des3 -out fstab 1024)
Generating RSA private key, 1024 bit long modulus      //生成私钥后对其使用单向加密
...++++++
.......++++++
e is 65537 (0x10001)
Enter pass phrase for fstab:
Verifying - Enter pass phrase for fstab:
[root@localhost tmp]# cat fstab
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED        //文件已加密
DEK-Info: DES-EDE3-CBC,FDE6A2F33BFB7396

     提取公钥:

[root@localhost tmp]# openssl rsa -in fstab -pubout   //也可重定向至某文件
writing RSA key
-----BEGIN PUBLIC KEY-----     //提取到的公钥
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDswswyZk/S6FVaCf8/UbXVnv+5

   构建私有CA:

          配置文件:/etc/pki/tls/openssl.cnf

[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = /etc/pki/CA           # 默认CA路径
certs           = $dir/certs            # 当前CA证书的存放路径
crl_dir         = $dir/crl              # 证书撤销后的存放路径
database        = $dir/index.txt        # 数据库文件,保存证书信息
new_certs_dir   = $dir/newcerts         # 新签证书位置
certificate     = $dir/cacert.pem       # CA自己的证书
serial          = $dir/serial           # 已签证书的序列号
crlnumber       = $dir/crlnumber        # 吊销证书编号
crl             = $dir/crl.pem          # 查看吊销证书文件
private_key     = $dir/private/cakey.pem# CA生成的私钥
RANDFILE        = $dir/private/.rand    # 私钥随机数文件

构建私有CA:

                在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可

                步骤:

             1、生成CA自己的私钥:

[root@localhost tls]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.........................................................................................+++                                     
..+++
e is 65537 (0x10001)
[root@localhost tls]# cat /etc/pki/CA/private/cakey.pem 
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwX7V+fzlLQKADdmsVpi5KFKHOorUm5pgfCqZjNXRficelcYz

        2、为CA提供所需的目录及文件         

                        mdkir /etc/pki/CA/{certs,crl,newcerts}

                                                touch /etc/pki/CA/{serial,index.txt}

                                                echo 01 >/etc/pki/CA/serial

            3、生成自签证书,CA给自己创建证书    

[root@localhost tls]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650      // 
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                       //国家
State or Province Name (full name) []:beijing              //哪个地区
Locality Name (eg, city) [Default City]:beijing            //哪个城市
Organization Name (eg, company) [Default Company Ltd]:magedu   //公司名
Organizational Unit Name (eg, section) []:OPS                  //岗位
Common Name (eg, your name or your server‘s hostname) []:ca.magedu.com   //个人或者主机名
Email Address []:             //可以为空

-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时
-key:生成请求时用到的私有文件路径
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书
-days:证书的有效期
注意:如果是提供Web服务的话主机名要填写Web地址。。。。

   到此CA自签证书已经创建完成,如果服务器需要安全通信,那得像CA请求签署证书:

          步骤:(已httpd为例)

           1、用到证书的主机生成私钥          

 mkdir /etc/httpd/ssl
 cd /etc/httpd/ssl
[root@localhost ssl]# (unask 077; openssl genrsa -out httpd.key 1024) //生成私钥
-bash: (unask: command not found
Generating RSA private key, 1024 bit long modulus
....................................................................................................++++++
...........................................++++++
e is 65537 (0x10001)

     2、生成证书签署请求

[root@localhost ssl]# openssl req -new -key httpd.key -out httpd.csr -days 365
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:Magedu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:
                                                  //一定要跟互联网的访问地址一致 
Email Address []:
Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:        //是否需要加密
An optional company name []:

     3、将签署请求发送给CA主机     

[root@localhost ssl]#scp httpd.csr root@172.18.0.1:/tmp/

     4、在CA主机上签署证书   

[root@CA tmp]#  openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Apr  7 10:20:39 2016 GMT
            Not After : Apr  7 10:20:39 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = beijing
            organizationName          = magedu
            organizationalUnitName    = OPS
            commonName                = www.magedu.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                98:B1:6E:03:88:9D:33:27:25:05:3F:3A:4C:DF:E2:33:99:1D:D3:D8
            X509v3 Authority Key Identifier: 
                keyid:18:AB:EB:D9:A1:1A:10:7C:42:2E:E0:51:34:F4:E9:46:7B:3B:CB:BC

Certificate is to be certified until Apr  7 10:20:39 2017 GMT (365 days)
Sign the certificate? [y/n]:y      //


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

5、把签署证书发给web服务器   

 [root@localhost ssl]#scp /etc/pki/CA/certs/httpd.crt root@172.18.0.2:/etc/httpd/ssl/

6、 查看证书签署信息

[root@localhost ssl]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
serial=02
subject= /C=CN/ST=beijing/O=magedu/OU=OPS/CN=www.magedu.com

Linux中加密和解密技术及CA认证

标签:网络安全   服务端   构建ca   linux   应用层   

原文地址:http://lanxianting.blog.51cto.com/7394580/1761924

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!