一、加密解密
加密技术是对信息进行编码和解码的技术,编码是将原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法。
明文:发送人、接受人和任何访问消息的人都能理解的消息
密文:明文消息经过某种编码,得到的密文消息
加密:将明文消息变成密文消息
解密:将密文消息变成明文消息
算法:取一个输入文本,产生一个输出文本
加密算法:发送方进行加密的算法
解密算法:接收方进行解密的算法
单向加密算法:只能加密,不能解密,其作用是提取数据的特征码,来验证数据的完整性
对称加密算法:加密和解密使用相同的密钥,其特点是可以将原始数据分割成固定大小的块,逐个进行加密,缺点是密钥过多,密钥分发困难
非对称加密算法(公钥加密):密钥是成对出现,加密和解密使用不同的密钥
公钥:公开给所有人
私钥(设置权限):自己留存,必须保证其私密性
特点:用公钥加密的数据,只能用与之对应的私钥解密;反之亦然
功能:身份认证(数字签名);密钥交换(公钥加密作用);数据加密
常用算法:
RSA :可用于加密和数字签名的算法,是最具影响力的公钥加密算法,能够抵抗目前已知的密码攻击
DSA:数字签名
单向加密:只能加密,不能解密;提取数据指纹(数据特征码:保证数据的完整性)
特性:定长输出
散列算法,主要验证数据的完整性,即保证消息在发送之后和接受之前没有被篡改对于ssl中使用到的散列算法主要有
md5:是RSA数据安全公司开发的一种单向散列算法
sha1:输入报文的最大长度不超过264位,产生的输出是一个160位的报文摘要,输入是按512位分组进行处理,是不可逆的,防冲突,并具有良好的雪崩效应
二、加密技术:
PGP:Pretty Good Privacy,是一个机遇非对称加密算法RSA公钥体系的邮件加密技术,不但可以对电子邮件加密,还可以对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份。
PKI : Public Key Infrastructure,是一种以非对称加密技术为核心,可以为网络提供安全服务的公钥基础设施,PKI技术起初应用在Internet环境中,为复杂的互联网系统提供统一的身份认证、数据加密和完整性保障机制,可以有效解决应用中的机密性、完整性、真实性和存储控制等安全问题,PKI体系包含认证中心(CA),注册中心(RA)、策略管理、密钥与证书管理、密钥备份与恢复、撤销系统等功能模块结合在一起。
三、SSL
Secure Socket Layer ==安全的套接字层,是介于应用层和传输层之间,应用层数据不再直接发送给传输层,而是先交给ssl层,ssl层对从应用层收到的数据进行加密,并增加自己的ssl头信息。
OpenSSL是实现ssl的开源项目,它包括 三个组件:
openssl:多用途的命令行工具
libcrypto:公共加密库
libssl:库,实现了ssl及tls等功能
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)工作目录
[[email protected] ~]# 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自己的私钥
[email protected] 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:指明给自己签署证书的有效期
[[email protected] 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.bengbengbengtu.com //证书主题自己的名字,别人和你通信是就使用此名字来联系你,而后你证书中的名字和通信时所使用名字必须要保持一致;否则就认为证书验证无法通过; Email Address []:[email protected] //联系人邮箱
5)创建辅助文件
[[email protected] CA]# touch index.txt [[email protected] CA]# echo 01 > serial
2、给节点发证书
操作步骤:
1、节点申请证书
在证书申请的主机上进行如下步骤;
(1)生成私钥
(2)生成证书签署请求;
(3)把请求发送给CA;
2、CA签发证书
(1)验证请求者信息
(2)签署证书
(3)把签署好的证书发还给请求者
1)以http目录为示例,给http签署证书:
[[email protected] httpd]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) [[email protected] 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 []:[email protected] 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给签证,过程如下
[[email protected] ~]# 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建立完成,测试即可!!!