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

加密解密基础及私有CA的实现-2015092801

时间:2015-09-28 19:22:38      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:ca   openssl   传输加密   

1、 加密解密简述

2、加密算法

3、加密解密步骤

4、使用openssl自建私有CA

    


                        


加密解密基础:

         由于互联网的数据传输基本上都是明文的(ftphttptelnet),而往往有些数据在互联网传输对于传输方来讲,确实涉及隐私或是一些敏感的内容不想让互联网上其他人看到,因此,引入了加密的机制。

         最早起的加密,采用移位的方式对数据进行加密,如数据数”abcd”,其对应的在互联网上传输的内容是”efgh”。后来的加密方式是采用密码对照本,意思就是说常常传输的信息中所包含的并非是实际内容,而是传输内容在传输方和接收方都会有一个密码本,密码本中记录了所传输的内容中所包含的每个或某些数据所对应的实际信息。但是上述的两种方式对于现在的计算机网络来讲,及其容易被暴力破解。

         因此,后来产生了算法加密。

         常用的加密机制有:单向加密、对称加密和公钥加密。下面分别简要阐述一下这三种加密方式都是如何实现以及其特点:

        

 

1、对称加密:

简述:加密方通过某种算法加上口令将明文数据经过各种转换生成密文数据。数据的安全性主要依赖于口令。口令是可变化的。解密方通过相同的算法及同一个口令将数据还原回原来的内容。

         常用加密算法:

                   DES(DataEncryption Standard): 使用64位密钥长度。

                   3DES:对数据进行三次des加密。

                   AES(AdvancedEncryption Standard):国际通行的加密算法。使用128位的密钥长度。AES还有许多版本(AES192,AES256,AES384),这些版本所采用的算法是一样的,无非就是密钥长度不同而已。

         特点:

a)加密解密使用同一个口令(密钥)

                   b)速度快(将数据切割成块,逐块儿计算加密)

         缺陷:

                   a)口令传输不方便(算法公开,但解密方还需要口令才能解密)

                   b)数据完整性无法保证(传输过程可能被篡改)

                   c)每个会话都需单独维持一对密钥,因此,会话数量过多时,所需维护的密钥数量也会随之增大。

                   d)无法验证数据接收方的身份

 

2、非对称加密

         又称“公钥加密”。通信双方在本地生成一个密钥对(一个公钥(Public Key)和一个私钥[Securet Key])。公钥所有人可见,私钥仅密钥对生成者拥有。

         常用算法:

                   RSAELGamalDSA(只能实现身份认证)

         特点:

                   使用公钥加密的数据只有与此公钥对应的私钥才能解密;同样,使用私钥加密的数据只有与此私钥对应的公钥才能解密

         缺陷:

                   a)由于密钥长度一般为1024bit或者更大,因此,在对数据加密时,效率极低,要比对称加密的速度慢3个数量级(没个数量级为103个数量级为1000)

                   b)无法验证数据的完整性

 

3、单向加密:将某些数据信息通过某种算法计算出长度一定的字符串。

         常用算法:MD5MD4SHA1SHA512CRC-32

         特点:

                   a)只能加密,不能解密

                   b)定长输出(算法一样时,最终输出的结果长度都是一定的)

                   c)雪崩效应(输入信息的微笑变化,会造成输出结果的巨大改变)

 

        

         由于以上阐述的三种加密方式都有其劣处,因此,在现今的互联网数据传输当中,通常将以上三种方式结合进行使用,以达到对数据加密的目的,如下图:

技术分享

加密解密的步骤  

       上图所经过的流程便是主机AB索取公钥,同时将自己的公钥发送给BB将事先生成的密钥对中的公钥发送给A;接着便是A在本地将数据使用单向加密提取数据的特征码,再用自身的私钥加密数据的特征码,然后将数据和使用私钥加密过的特征码使用对称加密算法加密,然后再用B的公钥把对称加密的密钥加密,最终将这些加密后的结果利用互联网传出给B。由于对称加密密钥是使用B的公钥加密的,因此,只有B的私钥才能解密。因此验证了接收方B的身份。

         B收到数据后,首先用自己的私钥解密得出对称密钥,而后用对称加密算法去解密加密后的数据和A的私钥加密后的数据特征码。然后使用A的公钥解密得出数据的特征码。再用单向加密算法计算出数据的特征码与解密出的特征码进行比对,查看是否数据在传输过程中有被篡改过。这样,即验证了通信双方的身份信息,有保证了数据的完整性和私密性。

 

         上述的通信加密过程,看似完美,但其实仍有漏洞存在。假如AB发送公钥请求时,被中间人截取,并且中间人将自己的公钥发送给A,声称自己是B,因此,A发送给B的数据,不但B收不到,并且数据全部会被中间人截取。因此为了保证公钥的可信度,通信双方需依靠CA(电子商务认证授权机构(CA, CertificateAuthority),也称为电子商务认证中心)来为自己的公钥"盖章",公钥的所有者向CA注册申请,CA向公钥所有者办颁发证书,证书中包含有请求者的公钥,因此,一旦CA是被人认可的,那么证书的信息也会被通信双方所信赖。

         在数据的加密传输过程中,AB发送公钥请求,BCA颁发给自己的证书发送给AA接收到证书后,使用CA的公钥解密B的证书,一旦证书解密成功,A便可确定证书确实是由其信赖的CA颁发。因此A便可信赖此公钥确实是B的。

         为了预防中间人冒充CA,微软的windows在系统安装时,内置了全球著名发证机构,即系统中包含了全球著名发证机构的证书。

         同样的,证书也有有效期的概念,一旦证书有效期到期或者是证书持有者向CA提出证书作废,那么作废的证书将被存入到证书吊销列表内。

        

PKI(Public KeyInfrastructure公钥基础设施)由四部分组成

         签证机构:CA

         注册机构:RA(申请注册证书方)

         证书吊销列表:CRL

         证书存取库

 

X509定义了证书的结构及认证协议标准:

         版本号

         序列号

         签名算法

         发行者的名称

         有效期限

         主体名称

         主体公钥

         发行者唯一标识

         主体的唯一标识

         证书的用途

         发行者签名(使用CA私钥加密的CA信息)


提取公钥得流程:

因此,如若通信的一方接收到另一方发来的证书,需要进行如下几个验证步骤:

1、使用对应CA的公钥,解密CA的签名信息

2、核对CA的信息是否与本地的存储的CA公钥信息吻合

3、使用CA签名信息中的算法提取证书的信息的特征码,保证证书传递过程中的完整性

4、验证证书拥有者的身份信息

5、验证证书是否过期

6、获取公钥,进行加密传输数据

 

OpenSSL

         实现数百种加密算法的开源套件。套件中包含3部分:

         Libcypto:通用的加密库,众多加密软件若想实现加密,可直接调用此库完成。

         Libssl:实现TLS/ssl的功能

         Openssl:多用途的命令行工具

 

利用openssl创建私有CA

Step1:创建CA服务器所需的目录:

certs  crl newcerts  private

对于centos6来讲,这些目录都是默认创建好的在/etc/pki/CA目录下,无需创建,若系统中没有,需自行创建

Step2:创建证书数据库文件:index.txt

[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# touch index.txt

Step3:创建序列号数据文件,并添加初始序列号到此文件

[root@localhost CA]# echo 01 >/etc/pki/CA/serial

Step4:生成CA的私钥:

[root@localhost CA]# (umask 077 ; opensslgenrsa -out /etc/pki/CA/private/cakey.pem 2048)
//此处加上括号意为在shell中打开一个子shell完成括号内的命令,命令结束后并能够销毁子
shell进程。由于私钥对外完全保密,因此权限为600,此处的CA私钥保存位置及文件名称为固定
格式。


Step5:生成CA的自签证书:

[root@localhost CA]# openssl req -new -x509-key /etc/pki/CA/private/cakey.pem
 -out/etc/pki/CA/cacert.pem -days 3600
//req 表示证书申请请求
//-new -x509为CA自签证书专用,以为自签一个X509标准的证书
//-key 指定密钥的位置
此处的路径及文件名为固定格式
You are about to be asked to enterinformation that will be incorporated
into your certificate request.
What you are about to enter is what iscalled a Distinguished Name or a DN.
There are quite a few fields but you canleave some blank
For some fields there will be a defaultvalue,
If you enter ‘.‘, the field will be leftblank.
-----
Country Name (2 letter code) [XX]:CN //国家的两位缩写
State or Province Name (full name)[]:BeiJing          //省份
Locality Name (eg, city) [DefaultCity]:BeiJing      //城市
Organization Name (eg, company) [DefaultCompany Ltd]:SuShi Ltd //公司名称
Organizational Unit Name (eg, section)[]:Ops        //部门
Common Name (eg, your name or your server‘shostname) []:ca.su.com     //服务器的主机名称
Email Address []:admin@su.com    //管理员邮箱


 

至此CA依然搭建完成。客户端的证书申请分为两步,

 

Step1:生成私钥,自行在任意位置创建目录,将生成的私钥放置任意位置

Step2:生成证书签署请求,命令同CA自签,但是不加-x509选项。但特别注意的是,CommonName (eg, your name or your server‘s hostname) 此项所填写的主机名称必须要与将来应用到的网站的主机名完全一致。

Step3:将生成好的证书签署请求发送至CA服务器

Step4:服务器端签发证书:

Openssl ca -in 客户端的签署请求 -out/etc/pki/CA/certs/xxx.crt -days 365

Step5:服务器端将签发的证书发送给客户端。客户端便可应用此证书


本文出自 “Linux技术博客” 博客,请务必保留此出处http://imsupeng.blog.51cto.com/10651675/1698750

加密解密基础及私有CA的实现-2015092801

标签:ca   openssl   传输加密   

原文地址:http://imsupeng.blog.51cto.com/10651675/1698750

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