密码算法和协议:四大类
对称加密:用于加密任意大小的数据块数据内容,加密方和解密方使用的是同一个密码
公钥加密:(非对称加密)加密和解密使用的是不同的密码,有公钥和私钥,密钥是成对出现的,公钥是从私钥中提前出来的,私钥是很长的,私钥加密速度比较慢。公钥是公开的,公钥加密需要用私钥解密,用私钥加密得用公钥解密。
单向加密:数据完整性算法:抽取数据的特征码,且在二次抽取后和此前的抽取进行比较,以验证数据的确没有被人篡改过的。
认证协议:用基于某种特性的算法来完成通信双方的真实性。
对称加密
常见的算法:DES(56位密钥)数据加密标准、3DES、AES(128、192、256、384、512位密钥)高级加密标准、 Blowfish、Twofish、IDEA、RC6、CAST5。
特性:
1.加密、解密使用同一个口令(密钥);
2.将明文分隔成固定大小的块,逐个进行加密;
简单通信过程:当用户A和B通信时,需要提供一个密钥,A和C通信时也需要提供一个密钥,也即任何人之间通信都需要提供密钥,且在两个人第一次通信时,由于互相都不知道对方的密钥,在网络上传输密钥时是明文传输的,密钥安全性不能得到保证。
缺陷: 1.密钥过多; 2.密钥传输;
密钥交换、身份验证、数据完整性都不能得到保证。
公钥加密也叫非对称加密
常见的算法:RSA(即可用来加密也可用来做身份验证)、DSA(只能做身份验证)、EIGmail
加密和解密不是使用同一个密钥,密钥是成对出现的
密钥:public key公钥,secret key私钥
使用公钥加密只能用与之配对的私钥解密,使用私钥加密也只能用与之配对的私钥加密。
通常用于 身份认证
密钥交换(密钥传送) IKE(Internet Key Exchange) 互联网密钥交换
常见DH算法
Diffie-Hellman(以下简称DH)密钥交换是一个特殊的密钥交换的方法。
DH可以让双方在完全缺乏对方(私有)信息的前提条件下通过不安全的信道达成一个共享的密钥。
此密钥用于对后续信息交换进行对称加密。
单向加密
常见的加密工具:MD5(128位)、SHA1(160位)、SHA256、SHA384、SHA512
通过提取数据指纹(特征码)可以实现数据完整性校验
特性:
定长输出
雪崩效应(输入条件的微小变化会产生输出条件的巨大变化)
在身份验证、数据完整性、数据保密性都得到保证的一个通信过程。以上三种加密方式都使用到了
以AA和BB通信为例
首先AA把要通信的数据用单向加密计算后得到特征码,用AA的私钥把特征码加密都附加在通信数据的尾部,AA在使用一种算法(对称加密)把整个数据进行加密生成一个字串,AA用BB的公钥把加密的密码加密放在这段字串后面一并发给BB。
BB收到数据后,用自己的私钥把加密的密码解密,再使用解密后的密码解密这段字串,解密后用AA的公钥把加密的特征码解密,再使用相同的单向加密计算这段数据的特征码,把计算出来的特征码和发送过来的特征码对比,一样则接收数据,不一样则放弃接收数据。
这里最重要的一步就是公钥的获取,如何得到对方的公钥,又如何得知一定是对方的公钥?
此 时就需要依赖于CA,每个人所发的公钥对方无法验证其真假,就像你说自己是xx,那怎么证明你就是xx呢?生活中我们都是通过***来验证的,但是*** 不能你自己做一张印上一个名字,就说自己叫xx,需要提供一张由公安部门所颁发的权威的***才能得到认可,因为大家是信任公安部门的权威性的。这里把公 安部门称为第三方机构也即是这里的CA。AA和BB通信之前要向CA去注册认证自己的身份。
AA向CA申请给自己发一个证(里面包含公钥、名字、有效期等CA会使用单向加密计 算这些数据特征码,CA再用自己的私钥加密这段特征码并附加在证书的后面),AA就把自己的证给BB,那此时BB如何去验证AA发来的证书不是伪证书?则 BB需要信任CA,才能信任CA所颁发的证书,BB使用CA的公钥解密这段特征码,再用相同的单向加密计算这些数据特征码,比较两个特征码是否一致,此时 CA的证书(公钥)从何而来呢?CA是自己给自己给发证书的。有的比较通用的证书在操作系统上都内置有,不需要通过网络传输。还有一些电子商务网站,你信 任这些网站,你访问时就安装它的证书。且需要提供有公信力CA是需要向根CA注册申请,都是需要比较高的金额。
如果在公司内部用,只需要自己创建一个私有CA,在公司私有网络中使用。
还有一种特殊情况,如果说私钥丢失了,该如何处理呢?
如何私钥丢了,必须让获得公钥的主机知道公钥被废了,因此CA机构需要维持一张列表(证书吊销列表),一旦私钥丢弃,则向CA申请自己的证书作废。CA机构就把丢失私钥的主机放到证书吊销列表中。
则通信时,还需要增加一步就是通信的对方收到数据后,需要到CA机构查看发送方是否在证书吊销列表中。(注意互联网上绝大部分通信者都没有这样做,因此互联网上通信还是存在安全隐患的)
一个证书颁发机构加上证书吊销列表等等形成了互联网安全通信的基本框架,这个基本框架也叫PKI(公钥基础设施)。
在用户注册证书的时候,就需要到第三方颁发机构申请证书,向RA(注册机构)申请,有CA做签名认证。证书是有很多种格式的。由ITU-T组织所定义的证书格式规范称为x.509(主要定义了关于证书结构和认证协议的标准)。
x.509标准有三个,第1、2、3版本,x509是基于公钥密码体制和数字签名的服务,在众多通信模型中都会被使用到(IP安全、TLS/SSL和S/MIME(安全地址邮件通信模型))。
最新证书所包含的内容:
证书的版本号、证书的序列号、算法参数、发行者的名称、有效期限、主体名称(证书的拥有者名字[用户使用的就是用户名,服务器使用的是主机名不能是ip])、公钥(对方提供的)、发行者的唯一ID、主体的唯一ID、。。、CA的签名(验证证书合法性)
一个证书在签署之前,由请求者自己先发送一个证书签署请求按照特定格式做好自己能填的信息(主体名称、公钥等)其他内容则留空提交给CA,由CA把其他内容都填充完,并且自己做好签名,就可以发给请求者。
Public Key Infrastructure
PKI公钥基础设施,是一种规范,任何遵循此种规范组织或架构等都认为是遵循PKI标准的
PKI有下面几部分内容组成:
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:用来检查证书是否存在的接口
PKI最前端是证书存取库,用户通过证书存取库获取证书,而后内容是证书的注册机构、后是签证机构。
用户通过存取库与RA交互,RA与CA交互,CA前端有一个证书吊销列表,用户通过存取库与证书吊销列表进行交互。
SSL
(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保 私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
ssl协议工作流程:
1)客户端发送请求报文给服务器,建立一个连接
2)服务器响应连接,并且根据客户端的身份确定是否生成新的主密钥,如需要则响应客户端的信息时将包含生成主密钥所需的信息
3)客户端收到响应,产生一个主密钥,并用服务器公开密钥加密回传
4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
CA
创建需要的文件
[root@localhost private]# cd /etc/pki/CA/ [root@localhost CA]# touch index.txt [root@localhost CA]# echo 01 > serial [root@localhost CA]# ll total 20 drwxr-xr-x. 2 root root 4096 Oct 15 2014 certs drwxr-xr-x. 2 root root 4096 Oct 15 2014 crl -rw-r--r-- 1 root root 0 Sep 29 03:45 index.txt drwxr-xr-x. 2 root root 4096 Oct 15 2014 newcerts drwx------. 2 root root 4096 Oct 15 2014 private -rw-r--r-- 1 root root 3 Sep 29 03:45 serial [root@localhost CA]#
查看配置文件
[root@localhost ~]# cd /etc/pki/tls/ [root@localhost tls]# ls cert.pem certs misc openssl.cnf private [root@localhost tls]#vim opemssl.cnf #################################################################### 40 [ CA_default ] 41 42 dir = /etc/pki/CA # Where everything is kept 工作目录 43 certs = $dir/certs # Where the issued certs are kept 证书位置 44 crl_dir = $dir/crl # Where the issued crl are kept 吊销列表 45 database = $dir/index.txt # database index file. 索引文件数据库 46 #unique_subject = no # Set to 'no' to allow creation of 47 # several ctificates with same subject. 48 new_certs_dir = $dir/newcerts # default place for new certs. 刚刚签署的证书位置 49 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 为吊销证书编号 53 # must be commented out to leave a V1 CRL 54 crl = $dir/crl.pem # The current CRL 55 private_key = $dir/private/cakey.pem# The private key 私钥位置 56 RANDFILE = $dir/private/.rand # private random number file 57 58 x509_extensions = usr_cert # The extentions to add to the cert 59 60 # Comment out the following two lines for the "traditional" 61 # (and highly broken) format. 62 name_opt = ca_default # Subject Name options 63 cert_opt = ca_default # Certificate field options
1.生成密钥对(注意权限位077)
[root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ...+++ ....+++ e is 65537 (0x10001) [root@localhost CA]# ll private/ total 4 -rw------- 1 root root 1675 Sep 16 15:59 cakey.pem
2.生成自签证书
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655 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]: 国家两位 State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:magedu Organizational Unit Name (eg, section) []:linux Common Name (eg, your name or your server's hostname) []: 关键位置(颁发ca的主机,不一致无法识别) Email Address []:caadmin@magedu.com [root@localhost CA]# ll total 20 -rw-r--r-- 1 root root 1424 Sep 16 16:12 cacert.pem 生成成功 drwxr-xr-x. 2 root root 4096 Oct 15 2014 certs
3.测试申请者(事例 httpd)
在该目录下创建ssl
[root@localhost httpd]# mkdir ssl You have new mail in /var/spool/mail/root [root@localhost httpd]# ls conf conf.d logs modules run ssl [root@localhost httpd]# pwd /etc/httpd CD到该目录中生成私钥 [root@localhost ssl]# (umask 077;openssl genrsa > httpd.key 1024) Generating RSA private key, 1024 bit long modulus .......................++++++ ...++++++ e is 65537 (0x10001)
4生成证书申请请求
root@localhost ssl]# openssl req -new -key httpd.key -out httpd.csr (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]:magedu Organizational Unit Name (eg, section) []:linux Common Name (eg, your name or your server's hostname) []:www.magedu.com (一定注意域名相同) Email Address []:httpdmastar@magedu.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: (密码)请求加密 [root@localhost ssl]# ls httpd.csr httpd.key
5传送httpd.csr到自建签证机构
[root@localhost ssl]# scp httpd.csr 192.168.1.108:/tmp/ The authenticity of host '192.168.1.108 (192.168.1.108)' can't be established. RSA key fingerprint is bb:91:c4:cd:6d:5a:47:fc:32:37:e7:a2:6d:61:57:0c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.108' (RSA) to the list of known hosts. root@192.168.1.108's password: httpd.csr 100% 708
6.通知鉴证机构查询该目录下的文件
[root@localhost CA]# ls /tmp fstab.cipher httpd.csr yum_save_tx-2015-09-10-16-357O7IlP.yumtx yum_save_tx-2015-09-10-16-35f_IQDs.yumtx
7.CA 盖章
[root@localhost tmp]# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3655 生成crt文件 [root@localhost tmp]# ls httpd.csr httpd.crt
8.回传
[root@localhost tmp]# scp httpd.crt 192.168.1.110:/etc/httpd/ssl
外篇吊销证书需要注意的步骤
吊销证书
(a) 客户端获取要吊销的证书的serial
# openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
(b) CA
先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;
吊销证书:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
(c) 生成吊销证书的编号(第一次吊销一个证书)
# echo 01 > /etc/pki/CA/crlnumber
(d) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text