一、加密解密

加密技术是对信息进行编码和解码的技术,编码是将原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法。

明文:发送人、接受人和任何访问消息的人都能理解的消息

密文:明文消息经过某种编码,得到的密文消息

加密:将明文消息变成密文消息

解密:将密文消息变成明文消息

算法:取一个输入文本,产生一个输出文本

加密算法:发送方进行加密的算法

解密算法:接收方进行解密的算法


单向加密算法:只能加密,不能解密,其作用是提取数据的特征码,来验证数据的完整性

对称加密算法:加密和解密使用相同的密钥,其特点是可以将原始数据分割成固定大小的块,逐个进行加密,缺点是密钥过多,密钥分发困难

非对称加密算法(公钥加密):密钥是成对出现,加密和解密使用不同的密钥

公钥:公开给所有人    

私钥(设置权限):自己留存,必须保证其私密性   

特点:用公钥加密的数据,只能用与之对应的私钥解密;反之亦然  

功能:身份认证(数字签名);密钥交换(公钥加密作用);数据加密       

常用算法:

RSA :可用于加密和数字签名的算法,是最具影响力的公钥加密算法,能够抵抗目前已知的密码攻击

DSA:数字签名

 单向加密:只能加密,不能解密;提取数据指纹(数据特征码:保证数据的完整性)

特性:定长输出

散列算法,主要验证数据的完整性,即保证消息在发送之后和接受之前没有被篡改对于ssl中使用到的散列算法主要有 

md5:是RSA数据安全公司开发的一种单向散列算法

sha1:输入报文的最大长度不超过264位,产生的输出是一个160位的报文摘要,输入是按512位分组进行处理,是不可逆的,防冲突,并具有良好的雪崩效应

 

二、加密技术:

PGP:Pretty Good Privacy,是一个机遇非对称加密算法RSA公钥体系的邮件加密技术,不但可以对电子邮件加密,还可以对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份。 

PKI : Public Key Infrastructure,是一种以非对称加密技术为核心,可以为网络提供安全服务的公钥基础设施,PKI技术起初应用在Internet环境中,为复杂的互联网系统提供统一的身份认证、数据加密和完整性保障机制,可以有效解决应用中的机密性、完整性、真实性和存储控制等安全问题,PKI体系包含认证中心(CA),注册中心(RA)、策略管理、密钥与证书管理、密钥备份与恢复、撤销系统等功能模块结合在一起。

加密解密、openssl、私有CA创建过程_rsa

 三、SSL

      Secure Socket Layer ==安全的套接字层,是介于应用层和传输层之间,应用层数据不再直接发送给传输层,而是先交给ssl层,ssl层对从应用层收到的数据进行加密,并增加自己的ssl头信息。

OpenSSL是实现ssl的开源项目,它包括 三个组件:  

openssl:多用途的命令行工具

libcrypto:公共加密库

libssl:库,实现了ssl及tls等功能   

 加密解密、openssl、私有CA创建过程_md5_02

SSL会话的简化过程(图)

(1) 客户端发送可供选择的加密方式(需要跟服务器端协商,发送二者都支持的算法),并向服务器请求证书;

(2) 服务器端发送证书以及选定的加密方式给客户端;

(3) 客户端取得证书并进行证书验正:这一步的主要目的是验证服务器端的公钥!

如果信任给其发证书的CA:

(a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;

(b) 验正证书的内容的合法性:完整性验正

(c) 检查证书的有效期限;

(d) 检查证书是否被吊销;

(e) 证书中拥有者的名字,与访问的目标主机要一致;

(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;

(5) 服务用此密钥加密用户请求的资源,响应给客户端;


四、建立私有CA的过程

CA和申请证书都在同一台机器上进行的。
1、CA端操作流程
操作步骤:
1、生成私钥文件;      
2、生成自签署证书;        
3、相关辅助文件
touch/etc/pki/CA/index.txt
echo01 > /etc/pki/CA/serial

注:
(1)私钥用于签发证书时,向证书添加数字签名使用;
(2)证书:每个通信方都导入此证书至“受信任的证书颁发机构”;


1)配置文件

/etc/pki/tls/openssl.cnf

####################################################################

[ CA_default ]  //定义Openssl做为CA时自己的相关路径

dir             = /etc/pki/CA           //指明CA自己的工作目录
certs           = $dir/certs            //已颁发证书的存取位置
crl_dir         = $dir/crl              //已吊销证书的吊销列表表存取位置
database        = $dir/index.txt        //数据库的索引文件存放位置
#unique_subject = no                    // 表示证书的整体信息是不是要唯一
                                       
new_certs_dir   = $dir/newcerts         // 刚签署的证书存放位置

certificate     = $dir/cacert.pem      //CA自己的证书(CA给其他人放证之前要先建立自己ID证书文件)
serial          = $dir/serial          //证书的序列号,下一个要发的证书的序列号,每签一个序列号会自动加1
crlnumber       = $dir/crlnumber       //吊销证书列表的编号
                                        
crl             = $dir/crl.pem          //当前正在使用的吊销链
private_key     = $dir/private/cakey.pem   // CA私钥存放位置 
RANDFILE        = $dir/private/.rand    //随机数的获取位置

x509_extensions = usr_cert          //定义了x.509的扩展信息中记录为“用户证书”


2)工作目录

[root@localhost ~]# ll /etc/pki/CA
drwxr-xr-x. 2 root root 4096 Sep 18 04:46 certs //证书文件存放位置
drwxr-xr-x. 2 root root 4096 Oct 15  2014 crl //吊销列表存放位置
drwxr-xr-x. 2 root root 4096 Sep 18 04:46 newcerts //新证书存放位置
drwx------. 2 root root 4096 Sep 18 03:52 private //CA私钥存放位置


3)创建CA自己的私钥

root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.....+++
................+++
e is 65537 (0x10001)


4)生成一个CA的自签证书

此自签署证书在/etc/pki/tls/openssl.cnf文件中定义必须放在CA目录下叫cacert.pem;从私钥中提取公钥,并构建成证书签署请求,然后让CA给签署;
格式:openssl req -new -x509-key  /etc/pki/CA/private/cakey.pem -out/etc/pki/CA/cacert.pem -days #
-x509:表示自签署证书,不加表示证书签署请求;
-key:从那个私钥中自动提取出公钥,并创建一个证书签署请求;
-days:指明给自己签署证书的有效期

[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN             //国家名
State or Province Name (full name) []:Beijing     //省名
Locality Name (eg, city) [Default City]:Beijing    //市名
Organization Name (eg, company) [Default Company Ltd]:bengbengtu.com      //公司名
Organizational Unit Name (eg, section) []:ops            //部门
Common Name (eg, your name or your server's hostname) []:ca.bengbengtu.com //证书主题自己的名字,别人和你通信是就使用此名字来联系你,而后你证书中的名字和通信时所使用名字必须要保持一致;否则就认为证书验证无法通过;
Email Address []:ca@bengbengtu.com  //联系人邮箱


5)创建辅助文件

[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial


2、给节点发证书
操作步骤:
1、节点申请证书
在证书申请的主机上进行如下步骤;
(1)生成私钥
(2)生成证书签署请求;              
(3)把请求发送给CA;
2、CA签发证书
(1)验证请求者信息
(2)签署证书
(3)把签署好的证书发还给请求者
1)以http目录为示例,给http签署证书:

[root@localhost httpd]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
[root@localhost httpd]# openssl req -new -key ssl/httpd.key -days 365 -out ssl/httpd.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:bengbengtu.com
Organizational Unit Name (eg, section) []:ops            
Common Name (eg, your name or your server's hostname) []:www2.bengbengtu.com //此名称要和证书申请者的FQDN的保持一致
Email Address []:www2@bengbengtu.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

#注:以上的国家、省名、城市名要和CA的保持一致

将生成的httpd.csr发送给CA,让CA给签证,过程如下

[root@localhost ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/www2.bengbengtu.com.crt -days 365     //签证
#httpd -M | grep mod_ssl   //查看httpd是否装载mod_ssl,如果没有请安装
#yum -y install mod_ssl      
# vim /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>
DocumentRoot "/web/vhosts/www2/"
ServerName www2.bengbengtu.com
SSLCertificateFile /etc/httpd/ssl/www2.bengbengtu.com.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

至此,CA建立完成,测试即可!!!