首页 > 代码库 > 加密 解密过程详解及openssl自建CA  

加密 解密过程详解及openssl自建CA  

                      加密 解密过程详解及openssl自建CA


为了数据信息能够安全的传输要求数据要有一定的安全性那么数据的安全性包含哪些方面的特性呢?

   NIST(美国信息安全署)做了如下的定义:

   保密性:       1,数据的保密性 指的是数据或隐私不向非授权者泄漏

                  2,隐私性  信息不被随意的收集



   完整性:       1,数据的的完整性:信息或程序只能被指定或授权的方式改变不能被随意的             修改

                  2,系统的完整性:确保系统以正常的方式执行预定的功能

   可用性:       对授权的用户不要拒绝服务且能工作迅速

   以上为NIST的定义规范,但是实际经验告诉我们为了达到数据安全性还有两个方面要注意

   真实性:      一个实体是真实的可被验证的也就是说要确保数据的发送方就是声称的那一个

   可追溯性:    一旦入侵事件发生可根据当前的证据溯源找到入侵者





那么怎样才能实现数据的安全性呢?OSI为我们定义了一个计算机安全通信的框架X.800

   大体内容如下:

   定义了什么是安全攻击,

   安全攻击:任何危机系统信息安全的行为都是安全攻击

   所用到的安全机制,

   安全机制:检测阻止攻击并恢复正常状态。方法有【加密,数字签名,访问控制,数据完整性,认证交换,路由控制,流量填充等】

     

   安全服务:对于本身不具备安全性的通信协议能够以一种安全地方式实现通信

             认证:保证通讯的真实性

             访问控制:阻止对资源的非法授权访问

             数据保密性:数据不向非法授权者泄漏

             数据完整性:接受方得到的数据没有被修改

             不可否认性:防止通信实体否定自己的行为

加密的方法:

wKiom1Pc9p2x1H0jAANukhvTodo718.jpg


下面将基于此框架介绍加密解密的过程:

wKioL1Pc9-Oixd2ZAAEO_BbBYfE169.jpg


 

    首先发送方准备一段要发送的数据,使用单向加密的方式对数据进行加密,得到特征码【此加密实现了数据的完整性】然后用自己的私钥加密特征码得到特征码的密文【此加密实现身份验证(因为用私钥加密,所以任何人用发送方的公钥能够解密这段数据就说明此数据是发送方的数据==只有发送方的公钥才能解密发送方私钥加密此段数据)】。但是此时这段数据还是任何人都能解密的(任何人都可得到发送方的公钥)。为了实现数据的保密性,那么发送方会将此两部分数据进行对称加密并将密码以对方的公钥进行加密【此加密实现数据的保密性】加密过程完成。数据发送到接收方。

 


wKioL1Pc-BfSf5abAAEuOrh_U54634.jpg



     接受方收到数据首先用自己的私钥解密密码密文,将解密后得到的密码连同【特征码密文+明文的密文】一同输入到相应的对称解密算法中的到特征码密文和明文 然后使用相同的单向加密算法对明文提取特征码, 将特征码密文使用发送方的公钥进行解密的到原始特征码。

提取的特征码与原始特征码进行对比,相同则接受 不同则丢弃  最后达到数据 解密过程完成。

 

 

  不知细心的你是否发现上述过程存在一个安全隐患,,对那就是公钥的身份无法验证。因此就有了CA 用于申请公钥 确保公钥使用者的身份准确。申请成功后CA会给申请者颁发证书。那么证书怎么才能表明申请者的身份呢,不知大家有没有发现在自己的系统或浏览器中存在一些根证书。是的这些根证书就是内置的一些可信任的包含CA公钥的证书。所以流程是这要的申请者向CA(可以自签名)提交自己的公钥 CA验证其身份合法后就会将申请者的名字,地域位置,证书使用期限,最重要的申请者的公钥数据进行单向加密,然后对特征码用自己的私钥加密。这样就制作成了证书,将证书颁发给申请者。这样通讯双方通信前都会向对方索取证书,然后用本地内置的CA公钥来解密证书,如果能解密(说明此证书确实为CA颁发)特征码再相同就说明此信息没被修改过。这要就说明了此证书内的公钥确实是发送者的。这个前提条件是:你必须是信任这个CA的。

 

   下面将介绍如何通过openssl创建私有CA 进行密钥签发

实验拓扑图:


wKiom1Pc9zmQNPARAADBRaUyw_I076.jpg

首先CA需要自己给自己颁发证书:
  CA服务器上执行:(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
  生成私钥注意此文件权限为600

wKioL1Pc-H3hPUSgAAGsWS-32Q4031.jpg

根据私钥生成自签证书:openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

wKiom1Pc94qxLTsqAAP4rL_HHQY601.jpg

注意主机名必须跟当前主机名一致

 
初始化工作环境
touch /etc/pki/CA/{index.txt,serial}
echo 01 > /etc/pki/CA/serial
若此两个文件不存在 给其他主机签署证书时会报错
节点1申请证书
准备自己密钥对:(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)


wKioL1Pc-N7x9iF6AAF3NCaC1S4892.jpg

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

wKioL1Pc-QzQUGOOAAS3bkJW2Cs879.jpg

把签署请求文件发送给CA服务器
Scp /etc/httpd/ssl/httpd.csr 172.16.101.34:/etc/pki/CA

wKiom1Pc-B7iMIXKAAHsr_RJk_Q913.jpg

CA 服务器签署证书
Openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/httpd.crt -days 1000
[root@www CA]# openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/httpd.crt -days 1000
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Aug  1 07:30:03 2014 GMT
            Not After : Apr 27 07:30:03 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Shandong
            organizationName          = Default Company Ltd
            commonName                = www.test.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                6C:CA:F2:88:50:83:61:83:09:D0:D3:31:BF:D7:BE:64:63:09:23:77
            X509v3 Authority Key Identifier: 
                keyid:64:67:BE:17:05:7C:58:4E:48:E0:D9:D9:CD:15:93:CC:83:9A:42:AE
 
Certificate is to be certified until Apr 27 07:30:03 2017 GMT (1000 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
 
 
发送给申请者
Scp /etc/pki/CA/httpd.crt  172.16.34.2:/etc/httpd/ssl/


节点2同理