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

互联网密文数据实现方式与私有CA功能实现

时间:2015-04-23 00:15:18      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:linux 私有ca

    友情提醒:文中实验平台为vmware workstation10 + centos 6.6 x86_64,在实际环境中请谨慎使用文件提及的命令。

     内容概括:

     1.数据加密方式与使用场景

     2.openssl命令的简单使用

     3.基于CentOS 6.6 X86_64平台实现私有CA的功能


    唠叨两句:写这篇博文的目的一是对学习知识的总结,二是IT从业入门朋友提供一个参考。因不是专业研究加密和解密的人员,文中涉及的方式,显的很肤浅,若读者为这方面的大牛或骨灰人物,请移步吧,毕竟每天你只有24小时。


    一 数据加密的方式和使用场景

   数据在互联网中安全传输要做到3点:数据内容机密性/数据内容完整性/通信双方的身份验证。

  1.1)数据内容的机密性

    所谓机密性,就是数据内容在传输过程中不能被第三方偷窥到。做到这点一般就是把明文的数据变为密文传输。这种转换方式通常用到对称加密。

    对称加密:数据发送方将明文数据和密钥经加密算法特殊处理后,将其变为密文发送出去。数据接收方接到数据后使用加密时相同的密钥和加密算法的逆算法,将密文变为明文。

        组成部分:算法和密钥。

        特点:算法可能是公开的,安全性依赖密钥。计算量小,加密速度快,效率高。

        不足之处:密钥的管理。与不同的通信对象通信,都要有不同的密钥,还要定期的更换。

        代表性算法:DES,3DES和AES。

        使用场景:加密数据。

  1.2)数据内容的完整性

     所谓完整性,就是数据内容在传送过程中不能被篡改。实现这一点通常是提取数据的特征码,只要通信双方使用相同算法对数据提取的特征码一致,就说明数据内容没有被篡改。使用单向加密是实现。

    单向加密:

        代表性算法:md5,sha1,sha512,CRC-32等。

        特点:(1)定常输出:不管源数据有多大和多小,在相同算法下计算出的结果长度都一致。

              (2)雪崩效用:输入内容微小改变,会引起计算结果的巨大改变。

              (3)不可逆:不可通过特征码反向算出源数据。(MD5以被破解,可找度娘咨询)

              (4)输入一样输出必然一样。

        使用场景:验证数据内容的完整性。

  1.3)通信双发的身份验证

      所谓身份验证,就是宣称能验证自己就是所宣称的那个人。通常使用非对称加密算法实现。

      非对称加密:又称公钥加密。生成一个私钥,从私钥中提取出公钥。私钥加密的数据,公钥可以解密;公钥加密的数据,私钥可以解密。私钥各自保存,公钥是公开的。

      A与B相互通信,A使用自己的私钥加密数据,B使用A的公钥解开被加密的数据,证明了A的身份。

而无法保证数据的机密性。

       A与B相互通信,A使用B的公钥加密数据,B可用配对儿的私钥解密数据,这保证了数据的机密性,但是无法证明A的身份。

        也就是说在非对称加密中有的算法即可实现加密,又能实现数据的签名。

       代表算法:RSA(实现:加密和签名)

                 DSA(实现:签名)

       特点:加密速度慢,很少用了加密数据内容,通常用来做签名。

       使用场景:标明自己的身份。


   1.4) 现在以Tom和Jerry间传递文件/etc/fstab为例,使用上面所述的三种方式实现数据的密文传输:

       TOM端:

(1)Tom为要为传输的文件/etc/fstab 使用单项加密算法提取特征码M1。

技术分享

(2)Tom使用自己的私钥加密特征码M1而得到M2

技术分享

(3)Tom将加密后的特征码M2与数据文件/etc/fstab使用临时生成的密钥C来进行二次加密得到数据D。


技术分享

(4)Tom将临时密钥C使用Jerry的公钥进行加密。


技术分享

(5)Tom将被Jerry公钥加密后的密钥C与数据D一起发给Jerry。


技术分享



       Jerry端:

(6)Jerry使用将Tom发来的数据,进行分离,得到数据D与被加密的密钥C。

技术分享

(7)Jerry使用自己的私钥能解开被加密的密钥C,证明了密钥C没有被篡改。

技术分享

(8)Jerry使用密钥C能解开被加密的数据D,得到了特征码M2与文件/etc/fstab,证明可数据的机密性。

技术分享

(9)Jerry使用TOM的公钥解开被加密的特征码M2,得到特征码M1,这证明了Tom的身份。

技术分享

(10)Jerry使用相同的算法算出/etc/fstab的特征码与M1相同,这证明了/etc/fstab文件的完整性。

    上述流程看着很完美,其实是有缺陷的,就是Tom和Jerry怎样安全的得到对方的公钥?并且怎样确认提供公钥的就是Tom或者Jerry?

    要解决这个问题必须使用CA证书。通信双方向第三方公信机构申请数字证书,证明自己的身份,当通信方A拿到通信方B的数字证书后,根据B数字证书中包含的信息,即可验证B的身份。就像我们都使用公安机关发布的居民***证明自己的身份一样。当前前提是这个第三方公信机构必须被双发所信任,若不被信任,那么上面的问题就是一个无解的,还是买张车票亲自去对方公司算了。

    CA这个签证机构所颁发的数字证书中有什么内容呢?

    数字证书现在一般流行使用X509 v3的版本。

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

     能在全互联网通用的CA签发的证书,申请是要花钱的,若是在自己公司内部使用的话,可自建私有CA来解决这个问题。


    二 Openssl命令

    在Centos 发行版Linux上提供一套名为openssl的组件,能帮助我们构架私有CA。openssl组件包含下面的三部分: 

     libcrypto:加密、解密库文件;
     libssl: ssl协议实现
     openssl:多用途命令行工具,每种功能都使用专用的子命令来实现 。

    openssl命令是这个组件中一部分,是实现私有CA的工具,在真实构建私有CA之前,必须学学openssl命令。

    openssl 提供三种命令:

        标准子命令:也是一级子命令,主要是openssl命令提供的各个功能。例如:对称加密相关的enc,单向加密相关的dgst,生成用户密码的passwd,生成随机数的rand等。

        消息摘要命令:这是二级子命令,主要用于指明单向加密时使用的算法,同标准子命令中的dgst连用。

        加密解密相关的命令:这是二级子命令,主要用于指明加密解密中使用的算法类型。同标准子命令中的enc连用。

        更详细的请看$man openssl

 

1)显示版本信息:使用命令openssl version

技术分享

2)加密测试:使用命令openssl enc加密:

技术分享

解析:$openssl enc -e -des3 -a -salt -in ./inittab -out ./inittab.jm1

      enc:表明使用openssl命令是用来加密解密的

      -e:表明是用来加密的

      -d:表明是用来解密的,不能同-e一起使用。

      -des3:表明加密的算法3DES

      -a:加密后的文件内容为bash64格式

      -salt:自动给下面输入的密钥中加点料,防止被比对内容猜测密钥

      -in /path/to/file:指明要被加密的文件在何处,叫什么名字

      -out /path/to/file:指明文件加密后放置何处,叫什么名字

      更多open enc的使用,请看$man enc

3)解密测试:也是使用openssl enc

技术分享

解析:-d:是解密的意思,其余参数请看2)中解释。


4)获取文件特征码:使用命令openssl dgst

技术分享

解析:$openssl dgst -md5 /path/to/file

    dgst:指明openssl中取文件的特征码

    -md5:指明算法

    /path/to/file:指明文件对象。

    更对请参阅:$man dgst

5)生成RSA算法的私钥:openssl genrsa:

技术分享

解析:$openssl genrsa -out ./cakey.pem 1024

     genrsa:指明使用rsa算法生成文件

     -out /path/to/file:指明生成的文件放置位置

     1024:指明称为私钥的长度

    *若想同时修改生成 的文件的权限可这样写:

    $(umask 077;openssl genrsa -out ./cakey.pem 1024)

    更多信息请查看$man genrsa

6)从私钥中提取公钥:

技术分享   

    三.实现私有CA的功能

    下面的过程在2台测试机上实现:

    IP:192.168.100.1  Hostname:caserver.lijun.com  角色:CA服务器

    IP:192.168.100.2  Hostname:Test02.lijun.com    角色:证书申请者

    3.1)建立私有CA(IP:192.168.100.1上实施)

步骤一:查看CA配置文件

在Centos上查看CA配置的文件/etc/pki/tls/openssl.cnf,比较重要的是下面这项:

------------------------------------------------------------------------

[ ca ]
 41
 42 dir             = /etc/pki/CA           # Where everything is kept            #设定CA的工作目录

 43 certs           = $dir/certs            # Where the issued certs are kept  #指定CA已签署过的的证书存取库的存放位置

 44 crl_dir         = $dir/crl              # Where the issued crl are kept       #指定CA吊销的证书的吊销列表的存储位置
 45 database        = $dir/index.txt        # database index file.                 #已签署证书的索引信息

 48 new_certs_dir   = $dir/newcerts         # default place for new certs.    #新签证书的位置
 50 certificate     = $dir/cacert.pem       # The CA certificate               #CA自己的证书位置

 51 serial          = $dir/serial           # The current serial number        #下一个被签署的证书的序列号

 52 crlnumber       = $dir/crlnumber        # the current crl number     #已吊销证书的编号

 54 crl             = $dir/crl.pem          # The current CRL                      #当前crl编号的证书

 55 private_key     = $dir/private/cakey.pem# The private key            #CA自己的私钥文件
 73 default_days    = 365                   # how long to certify for          #CA签署的证书的默认使用天数
 74 default_crl_days= 30                    # how long before next CRL     #被吊销的证书展示时常

---------------------------------------------------------------------------

要确保在CA的工作目录下:下列目录和文件的存在:

certs crl index.htx newcerts serial crlnumber private

技术分享

步骤二:生成私钥

技术分享


步骤三:生成自签署证书

技术分享

技术分享

    3.2)生成证书申请(IP:192.168.100.2上实施)

技术分享


    3.3)CA为申请者签署证书(IP:192.168.100.1上实施)

技术分享

技术分享

 技术分享 

技术分享


    要注意2个问题:

        1.私钥要加密保存

        2.可研究下openca的用法,它更适合大型企业私有CA的建设。







本文出自 “哥不是海盗” 博客,请务必保留此出处http://pirateli.blog.51cto.com/10063802/1637349

互联网密文数据实现方式与私有CA功能实现

标签:linux 私有ca

原文地址:http://pirateli.blog.51cto.com/10063802/1637349

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