linux中加密解密以及Opensll建立CA
现在如今个人以及公司对自己的数据以及隐私越来越关注,之前美国斯诺登事件的爆出,又将通讯安全话题引发激烈的讨论。下面我们就来说下linux中的加密解密,以及通讯过程中如何确保通讯的安全。
常见的加密方法有三种:对称加密、单向加密、非对称加密,下面简单说下这三种加密方式。
对称加密:加密和解密使用同一个密钥;依赖于算法和密钥;安全性依赖于密钥,而非算法常见算法有DES:Data Encryption Standard, 56bits、3DES、AES: Advanced Encrpytion Standard, (128bits, 192, 256, 384, 512bits)、Blowfish、Twofish、IDEA、RC6、CAST5。此些算法都有由数学家们通过精心计算得到。
特性:
1、加密、解密使用同一密钥;
2、将明文分隔成固定大小的块,逐个进行加密;
缺陷:
1、密钥过多;
2、密钥分发;
非对称加密:公钥从私钥中提取而来;使用公钥加密的数据,只能使用与此公钥配对儿的私钥解密;反之亦然;有公钥和私钥的密钥对,私钥:secret key,仅允许个人使用,公钥:public key,公开给所有获取;私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份,与被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方,对方得到自己公钥加密的数据以及发送者的私钥。通常的算法有RSA、DSA、ELGamal,主要的特征有:1、密钥长度较大,例如512bits, 2048bits, 4096bits,2、加密解密分别使用密钥对儿中的密钥相对进行,3、常用于数据签名和密钥交换
单向加密:通过提出数据的特征码获得,它的特性为:1、密钥长度较大,例如512bits, 2048bits, 4096bits;2、雪崩效应:原始数据微小改变,将会导致结果巨大变化;3、不可逆;通常的算法有:MD5(128bits定长输出)、SHA1(160bits定长输出)、SHA256(160bits定长输出)、SHA256(256bits定长输出)、SHA512(128bits定长输出)等。
在一次加密通信过程的过程如下。
发送者:
1、使用单向加密算法提取生成数据的特征码;
2、使用自己的私钥加密特征码附加在数据后面;
3、生成用于对称加密的临时密钥;
4、用此临时密钥加密数据和已经使用私钥加密后的特征码;
5、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方;
接收方:
1、使用自己的私钥解密加密的临时密钥;从而获得对称密钥;
2、使用对称密钥解密对称加密的 数据和私钥加密的特征码密文;从而获得数据和特征码密文;
3、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码;
4、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较;
此过程比较繁琐,故通常的使用者不会手动每次去操作此过程,因此产生了SSL,SSL:secure socket layer(即获取到对方服务器的CA证书,得到对方的公钥,生成私钥,然后发送给服务器端,服务器发送数据给请求方,请求方有服务器端的公钥,可以解密,这样就能形成联系),通常证书主要有两类,主机证书以及用户证书,用户证书包含主机证书将自己的私钥形成的公钥,以及CA证书等信息。CA:CA证书的发证机构为具有公信力的机构,一般网站会购买一个CA证书用于认证,保证公钥信息的安全分发;
数字证书的格式(x.509 v3):
版本号(version)
序列号(serial number):CA用于惟一标识此证书;
签名算法标志(Signature algorithm identifier)
发行者的名称:即CA自己的名称;
有效期:两个日期,起始日期和终止日期;
证书主体名称:证书拥有者自己的名字
证书主体公钥信息:证书拥有者自己的公钥;
发行商的惟一标识:
证书主体的惟一标识:
扩展信息:
签名:CA对此证书的数字签名;
openssl是基于ssl开发的,在linux上使用,openssl的组成部分:libcrypto(加密、解密库文件)、libssl( ssl协议实现)、openssl(多用途命令行工具,每种功能都使用专用的子命令来实现)。
下面首先来说下openssl的一些加密指令:
openssl:
子命令分类:标准命令、消息摘要命令、加密、解密相关的命令
加密文件(对称加密):
工具:openssl enc, gpg
算法:des, 3des, aes, blowfish, twofish, idea, cast5
enc工具:
# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFI
例openssl enc -e -des3 -a -salt -in path -out path.de3
# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE
例openssl enc -d -des3 -a -salt -in path.de3 -out path.22
单向加密:
算法:md5, sha1
工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
# openssl dgst -CIPHER(算法如md5) /PATH/TO/SOMEFILE...
或者 md5sum /PATH/TO/SOMEFILE
例如:
[root@localhost tmp2]# openssl dgst -md5 lib
MD5(lib)= 8fcd1d3f02caeebfa22c649471a57b28
[root@localhost tmp2]# md5sum lib
8fcd1d3f02caeebfa22c649471a57b28 lib
MAC: 消息认证码,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:
CBC-MAC
HMAC:使用md5或sha1算法
生成用户密码:
# openssl passwd -1 -salt 8bits -salt是加在密码前面,用于加强加密
生成随机数:
# openssl rand -hex|-base64 NUM -hex是16位 -base64生成字母和数字
随机数生成器:
random, urandom
熵池:保存硬件中断产生的随机数
/dev/random:仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的进程将会被阻塞;
/dev/urandom:先从熵池中取随机数,当熵池中的随机耗尽时,就通过伪随机数生成器生成随机数;
下面说下我们平时工作会遇到的在自己公司建立私有的CA,以及发证、签证的过程;
使用OpenSSL构建私有CA的过程为主机在服务器生成私钥,然后生成自己证书文件;
(1) 私钥用于签发证书时,向证书添加数字签名使用;
(2) 证书:每个通信方都导入此证书至“受信任的证书颁发机构”;
配置文件(默认CA的配置文件):/etc/pki/tls/openssl.cnf
工作目录:/etc/pki/CA/
[root@localhost CA]# ls
certs crl newcerts private
certs证书文件存放
crl 吊销列表
newcerts 新证书文件
private 私钥存放位置
建立私有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 (01表示第一个)
给节点发证书:
1、节点申请证书
在证书申请的主机上进行如下步骤:
(1) 生成私钥;(umask 077; openssl genrsa -out httpy.key 1024)
(2) 生成证书签署请求; openssl req -new -key /etc/http.key -out /etc/httpd/http.csr
(3) 把请求发送给CA;
注意:
(a) 其中的subject信息部分,要与CA的保持一致;
(b) Common Name要使用此主机在通信真实使用名字;
2、CA签发证书
(1) 验正请求者信息
(2) 签署证书
# httpopenssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
(3) 把签署好的证书发还给请求者
吊销证书:
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.cr
小结下,在公司的服务器中很有可能会用到私有CA,以保证通信的安全性。
本文出自 “LinuxNew” 博客,请务必保留此出处http://jimchen.blog.51cto.com/10026955/1637181
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。