码迷,mamicode.com
首页 > 其他好文 > 详细

加密、解密以及openssl建立CA

时间:2015-04-22 16:29:02      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:服务器   应用层   安全性   数据加密   私密性   

    

    首先先科普一下OpenSSL,我们知道OpenSSL,全名叫Open Secure Sockets Layer,这是一个强大的安全套接字层密码库,主要包括密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的程序供测试或其它目的使用。此外,OpenSSL是基于SSL协议的,SSL要求建立在可靠的传输层协议之上。它优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTPFTPTELNET等协议)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证了通信的私密性。

    然后对于区分数据加密和身份认证。加密是将数据加密,即使非法用户获得加密过的数据,也无法探测其真实数据内容,侧重点在于数据的安全性;身份认证其实就是用来判断某个身份的真实性,然后再给予其相应的权限,其侧重点在用户的真实性。



1.几种常用的加密算法

    1.对称加密----加密和解密都是使用同一个密钥

         特性:

                1)加密和解密使用同一密钥    

                2)将明文隔成固定大小的块,逐个进行加密

         缺陷:密钥分发过多


    2.非对称加密---也称公钥加密,分为私钥和公钥,私钥仅给个人使用,公钥是给所有人公开获取的。常用算法:RSA、DSA(只能实现数据签名)

           特性:

                1)密钥长度较大,比如有512bits、2048bits、4096bits等,所以一般不用于对数据加密,而大部分用于对密码加密。

                2)加密、解密分别使用密钥对儿中的密钥相对进行

                3)常用于数据签名和密钥交换

            用处:

                1)身份验证(即私钥拥有者用自己的私钥加密的数据,只要用其公钥就能解密,即可验证其身份;反之,公钥拥有者用自己的公钥加密的数据,采用其私钥也能解密,即可实现数据的机密性)

                2)密钥交换(与被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,然后传给对方)

            


    3.单项加密---实质上主要就是提取数据的特征码。常用算法: MD5(128bits定长输出)、SHA1、SHA256、SHA384、SHA512等

        特性:

              1)定长输出:无论原来的数据是多大级别,其加密结果长度一样;
              2)雪崩效应:原始数据微小改变,将会导致结果巨大变化;
              3)不可逆


2.一次加密解密通信,实现身份验证,数据完整性和数据加密的过程

    对于发送方A来说,A首先要对要传输给B的数据data用单向加密算法获取得到相应的特征码,并把特征码附在data的后面;然后A采用非对称加密算法,用自己的私钥对特征码进行加密;对特征码进行非对称加密之后,A再采用对称加密算法生成临时密钥,临时密钥用于对整个数据以及特征码进行加密;此后A再采用接收方B的公钥对整个临时密钥进行加密,附加 到对称加密的后方。然后就发给接收方B

        对于接收方B来说,收到A发来的信息之后,首先用自己的私钥解密已加密的临时密钥,得到临时密钥之后,再采用对称加密算法解密临时密钥,从而得到数据和已加密的特征码;然后用A的公钥解密已加密的特征码,得到特征码;而后再采用同样的单向加密算法对得到的数据进行特征码提取;最后用自己生成的特征码与A生成的特征码进行比对,于是就实现了身份验证。A--B整个通信过程就实现了身份验证、数据完整性和数据加密的过程。


3.采用openssl工具建立私有CA

           步骤:

               1、生成私钥文件: /etc/pki/CA/private/cakey.pem

 # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)


               2、生成自签证书

 # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days #

                          -new: 生成新的证书签署请求;
                         -key:私钥文件路径,用于提取公钥;
                         -days N: 证书有效时长,单位为“天”;
                         -out:输出文件保存位置;
                         -x509:直接输出自签署的证书文件,通常只有构建CA时才这么用;

               3、提供辅助文件

  # touch /etc/pki/CA/index.txt
  # echo 01 > /etc/pki/CA/serial

                  

4.数字证书

    CA:简答的说就是签证机构。它的功用是用于保证公钥信息安全分发; 

    数字证书的格式(x.509 v3):

    版本号(version)
               序列号(serial number):CA用于惟一标识此证书;
               签名算法标志(Signature algorithm identifier)
               发行者的名称:即CA自己的名称;
               有效期:两个日期,起始日期和终止日期;
               证书主体名称:证书拥有者自己的名字
               证书主体公钥信息:证书拥有者自己的公钥;
               发行商的惟一标识:
               证书主体的惟一标识:
               扩展信息:
               签名:CA对此证书的数字签名;


           


5.给节点发证书
               1、节点申请证书
                    在证书申请的主机上进行如下步骤:
                         (1) 首先生成私钥;
                         (2) 然后生成证书签署请求;

                         【注意:
                              (a) 其中的subject(表示国家地区省份等)信息部分,要与CA的保持一致;
                              (b) Common Name要使用此主机在通信真实使用名字;不能使用ip地址】

                         (3) 最后把请求发送给CA;

               2、CA签发证书
                    (1) 首先验正请求者信息
                    (2) 然后签署证书

# openssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N

                    (3) 最后把签署好的证书发还给请求者

6.吊销证书:
               1、获取吊销证书的序列号;     

# openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject

                                       

               2、实现证书吊销
                    (1) 吊销证书

# openssl ca -revoke /PATH/FROM/CRT_FILE


                    (2) 生成吊销证书的编号

#   echo 01 > /etc/pkie/CA/crlnumber

              
                    (3) 更新证书吊销列表

# openssl crl -gencrl -out THISCA.crl

         

最后发点小总结用于记忆这些常用命令。

    总结:

        genrsa(生成私钥文件), 

        req(生成自签证书),

         ca(签署或吊销(附加-revoke)证书), 

        x509(获取吊销证书的序列号),

        crl(更新证书吊销列表)

        rsa(从私钥中提取公钥)


技术分享哎。。。。。黑夜那么短,我想go bed了!



加密、解密以及openssl建立CA

标签:服务器   应用层   安全性   数据加密   私密性   

原文地址:http://tanjie.blog.51cto.com/10027618/1636713

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