linux中加密解密以及Opensll建立CA

 现在如今个人以及公司对自己的数据以及隐私越来越关注,之前美国斯诺登事件的爆出,又将通讯安全话题引发激烈的讨论。下面我们就来说下linux中的加密解密,以及通讯过程中如何确保通讯的安全。

常见的加密方法有三种:对称加密、单向加密、非对称加密,下面简单说下这三种加密方式。

对称加密:加密和解密使用同一个密钥;依赖于算法和密钥;安全性依赖于密钥,而非算法常见算法有DESData 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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。