标签: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
标签:linux 私有ca
原文地址:http://pirateli.blog.51cto.com/10063802/1637349