第一部分:加密算法和原理    
第一、基础知识

1)数据加密:

  SSL: Secure Socket Layer

2)NIST: (该组织评价网络安全)    
      保密性: 
          数据保密性 
          隐私性 
      完整性: (不能被修改)    
          数据完整性 
          系统完整性 
      可用性:

3)OSI: x.800 (OSI国际标准组织定义x.800标准)    
   安全***: (第一层面)    
       被动***:监听 (网络监听)    
       主动***:伪装、重放、消息篡改、拒绝服务 (导致服务无法进行)    
   安全机制: (第二层面)    
      加密/解密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证

      (数字签名,说明发送的信息是发送人发送的)    
   安全服务: 
      认证 
      访问控制 
      数据保密性 
            连接保密性 
            无连接保密性 
            选择域保密性 
            流量保密性    
            数据完整性    
            不可否认性(用于网络交易等)

            PKI:public Key Infrastructure(现代互联网机制)

4)密码算法和协议: 
        对称加密 (加密与解密同一个密钥)    
       公钥加密 (配对使用,公钥需要私钥解密)    
       单向加密 (只加密不能够解密)    
        认证协议

第二:加密算法介绍

  1)加密算法和协议: 
     AA:对称加密:

        加密和解密使用同一个密钥;速度对    
         依赖于:算法和密钥; 
         安全性依赖于密钥,而非算法;

    常见算法: 
        DES:Data Encryption Standard, 56bits(已破解) 
        3DES: 
        AES: Advanced Encrpytion Standard, (128bits, 192, 256, 384, 512bits) 
        Blowfish 
        Twofish 
        IDEA 
        RC6 
        CAST5

     特性: 
        1、加密、解密使用同一密钥;

     数据输入后再输入密钥,接收到再使用密钥还原数据原来的样子)    
        2、将明文分隔成固定大小的块,逐个进行加密;

     缺陷: 
        1、密钥过多; 
        2、密钥分发;

         一个人与多个人通信需要维护多个密钥。不适合分布式使用。

BB:非对称加密:公钥加密 
密钥对儿:私钥和公钥配对使用 
     私钥:secret key,仅允许个人使用(不能够公开); 
     公钥:public key,公开给所有获取;

     公钥从私钥中提取而来;使用公钥加密的数据,只能使用与此公钥配对

      的私钥解密;反之亦然;

 用处: 
       身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解

       密,即可认证其身份; 
       密钥交换:与被通信方通信之前,首先获取到对方的公钥,自己生成

       一个加密密码,用对方的公钥加密,并发送给对方; 
       数据加密:

 算法: 
        RSA (三个人名字的简写)    
        DSA (数据签名标准)    
        ELGamal

   特性: 
        1、密钥长度较大,例如512bits, 2048bits, 4096bits 
        2、加密解密分别使用密钥对儿中的密钥相对进行; 
        3、常用于数字签名(DSA)和密钥交换;

2)单向加密:提出数据的特征码; 
     特性: 
        1、定长输出:无论原来的数据是多大级别,其加密结果长度一样; 
        2、雪崩效应:原始数据微小改变,将会导致结果巨大变化; 
        3、不可逆:

      算法: 
          MD5:128bits定长输出; 
          SHA1:160bits定长输出; 
          SHA256 
          SHA384 
          SHA512:

           CRC32(循环冗余校验码)

          /etc/shadow: ( entos 6.7使用sha512加密)    
$#$#######$#############################

      用处: 
           1、数据完整性;

3):数字签名:

4):密钥交换:IKE (Internet Key Exchange)

  p_w_picpath

   双方初次通信时用对方公钥加密,然后对方利用自己的私钥进行解密

这样双方即可安全通信。称为密钥交换。(密钥加密后存放)

  针对上面IKE方式存在破解可能,利用DH算法进行加密。双方通信之前

生成一个对称密钥,不需要网上传输

p_w_picpath

   这时双方知道各个需要的密钥。双方通信过程如下:

         
      DH (Deffie-Hellman) 
          A:P,G (质数、生成器是公开的A与B都知道)    
               X(A生成加密数据)

               P^X%G(取模计算发给B)

              从B拿到:(P^Y%G)^X=P^XY%G

         B: 
            公开:P,G 
            私有:Y(B生成加密数据)

             P^Y%G(取模计算发给A)

             从A拿到:(P^X%G)^Y=P^XY%G

5)一次加密通信过程 
  发送者: 
     1、使用单向加密算法提取生成数据的特征码; 
     2、使用自己的私钥加密特征码附加在数据后面; 
     3、生成用于对称加密的临时密钥; 
     4、用此临时密钥加密数据和已经使用私钥加密后的特征码; 
     5、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方;

  接收方: 
     1、使用自己的私钥解密加密的临时密钥;从而获得对称密钥; 
     2、使用对称密钥解密对称加密的 数据和私钥加密的特征码密文;

         从而获得数据和特征码密文; 
     3、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码; 
     4、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较;

使用对称加密、公钥加密、单向加密、密钥交换保证通信安全,频繁使用对方公钥

公钥的签方方法使用CA证书。

  示意图:

p_w_picpath

   第一步:单向加密生成数据指纹

   第二步:使用自己的私钥加特征码附加到数据后

   第三步:再生成一次性对称密钥,将整个数据加密,

   第四步:使用对方的公钥再次将数据加密附加到数据后面。

      左则数据进行加次附加1次私钥和特征骊,另一次对方公钥

   第五步:文件发送到对方,用自己私钥解密。此时获得签名信息

   第六步:使用对方公钥进行解密,能够解密说明是对方的签名。发送者为对方

   第七步:解密后是特征码,再比较特征码一致保证完整性

 


第二部分:OpenSSL

第一:基础知识

1)SSL的历史

     SSL网景公司研发协议,应用层以加密的形式发送。

(在传输层与应用层之间的半层协议)

   SSL通信过程:Secure socket layer(三版)

            sslv1, sslv2, sslv3

   目前由 IETF组织维护,定义tls(transport layer securty) v1.0相当sslv3

     IETF:tls 1.0,tls v1.1,tls v1.3(目前为常用1.2版本)

     http --> ssl --> https (443)

2)SSL的工作过程:

工作过程如下:

   @1:客户端浏览器与服务端进行三次握手,

创建虚拟链路,然后SSL握手协议。

   p_w_picpath

    @2:向服务器发送多种算法,web server收到请求二者都支持的加密算

法,同时客户端向服务器请求数字证书(包括使用者的公钥)。

p_w_picpath

  @3:同时服务端向客户端反馈支持的加密算法和数字证书。这里客户端

验证服务端的证书是否有效,验证后客户端接受服务端证书

   @4:客户端用接受服务器端的证书保存的公钥信息,加密生成临时的一次性

会话密钥。发送到服务端

p_w_picpath

  @5:服务端这请把客户端请求的网页等内容以加密的形式返回给客户端。

p_w_picpath

   @6:如果有长链接方式,中间会有不断的数据通信

p_w_picpath

@7:断开SSL,然后TCP

p_w_picpath

   https与http的区别在于创建虚拟链路后进行SSL握手。

握手完成后http请求和报文,这里发送信息为加密的。

客户端发送对称加密密钥给服务端。服务端用加密

信息反馈给客户端。浏览器自动解密予以显示。同时用

密钥加密请求给服务端,服务端加密响应给客户端。

最后先断开ssl联接,然后断开tcp链接(四次)

p_w_picpath

第二: 数字证书:

    证书是持有者的详细信息,证书有公钥。包括名称、公钥信息等

针对证书的防伪信息叫做签名。

p_w_picpath

1)CA:签证机构 (签发证书的机构)    
      功用:保证公钥信息安全分发;

2)数字证书的格式(x.509 v3): 
       版本号(version) 
       序列号(serial number):CA用于惟一标识此证书; 
       签名算法标志(Signature algorithm identifier) 
       发行者的名称:即CA自己的名称; 
       有效期:两个日期,起始日期和终止日期; 
       证书主体名称:证书拥有者自己的名字 
       证书主体公钥信息:证书拥有者自己的公钥; 
        发行商的惟一标识:  CA标识号    
        证书主体的惟一标识: 
        扩展信息: 
        签名:CA对此证书的数字签名;(防伪信息)

用单向加密算法,有CA自己的私钥加密特证码后附加到证书后面,

接受者用判断时用CA的公钥解密这段签名,如果认可说明是用效的。

同时用单向验证是否有效(加密前与解密是否一致)

3)证书通常有两类用途: 
       用户证书  :用户与用户之间    
       主机证书(httpd):服务器进程之间

       撤消证书:(证书颁发机构要维护证书吊销列表)

4)PKI: Public Key Infrastructure  (公钥基础设施)    
     签证机构:CA    用来发证    
     注册机构:RA    只接受注册申请    
     证书吊销列表:CRL  
     证书存取库:

    私有CA 

5)openssl的组成部分: (openSSL协议,加密解密SSL协议的实现)

      libcrypto:加密、解密库文件; 
      libssl: ssl协议实现  
      openssl:多用途命令行工具,每种功能都使用专用的子命令来实现

    前二个是库文件是开发程序可直接调用,后一个是命令工具。

6)gpg: GNU Privarcy Guard    
        是pgp规范的实现;

  OpenPGP encryption and signing tool

7)openssl:可创建私有CA 
子命令分类: 
       标准命令 
       消息摘要命令 
       加密、解密相关的命令

openssl   ?  #显示支持的命令

p_w_picpath

8)加密文件(对称加密): 
     工具:openssl enc, gpg 
     算法:des, 3des, aes, blowfish, twofish, idea, cast5

   enc工具: 
# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE –out

/PATH/TO/SOMECIPHERFILE

   -e表示加密   -CIPHERNAME 表示算法  3des使用des3算法(支持多种采用默认值)

   -a 表示以文本输出 否则是二进制数   -salt表示加些随机数  -in+文件 加密那个文件

   -out 文件 表示输出放到那个文件当中

示例:

     @1:备份文件

openssl enc -e -des3 -a -salt -in fstabtest -out fstabtest.cert

根据提示输入二次密码

p_w_picpath

     @2:生成fstabtest.cert,利用cat 查看,为加密后文件

p_w_picpath

# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE –out

/PATH/TO/SOMEFILE

  -d表示解密

  示例:@1 将原文件fstabtest删除

   @2:利用fstabtest.cert还原文件

openssl enc -d -des3 -a -salt -in fstabtest.cert -out fstabtest.new

p_w_picpath

9)单向加密: 
   算法:md5, sha1 
  工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum,

sha512sum

# openssl dgst -CIPHER /PATH/TO/SOMEFILE...     #dgst为单向加密算法

MAC: 消息认证码,单向加密的一种延伸应用,用于实现在网络通信中保证所传

输的数据的完整性;

    机制: 
      CBC-MAC 
      HMAC:使用md5或sha1算法

  示例:用md5sum /filepath/filename  提取文件特征码

p_w_picpath

  方法2:使用openssl计算

   openssl dgst –md5 /etc/fstab(二种方法计算一致)

p_w_picpath

10)生成用户密码: (-1表示md5单向加密)

    # openssl passwd -1 -salt 8bits随机数

示例:openssl passwd -1 -salt $(openssl rand -hex 4)

表示生成用户密码为md5加密的8位16进制数

p_w_picpath

 

11)生成随机数: 
    # openssl rand -hex|-base64 NUM

    -hex表示以16进制输出      -base64表示编码格式     NUM表示字节数

示例:openssl rand –hex 4(

p_w_picpath

   每四位一个16进制数,4个四节为8位16制数 (4个字节为32位,4位1个16进制

数,这样共需要2个4位16进制数。这样输出为8个16进制数)   rand表示随机数

也可用以使用-base64 (包括==主要作用对齐格式)有效为前6个

p_w_picpath

12)公钥加密:(二个主要功能是数字签名与密钥交换)

   用公钥加密是和于密钥交换   用私钥交换用于身份验证    
     工具:gpg, openssl rsautl(工具)

  数字签名:RSA, DSA, ELGamal 
        DSA: Digital Signature Algorithm 
        DSS: Digital Signature Standard

密钥交换: 
       公钥加密、DH

       生成密钥对儿: 
       操作过程:生成私钥,从私钥中提取公钥;

       -out保存到那里     NUM_bit保留多少位    
# openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS

  注意:在bash命令行上放在小括号中执行的命令,其实是通过打开一个子shell进程进行的;

  #(umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS)

      生成文件权限为600(666-077)定义只对当前shell有效

示例:

(umask 077;openssl genrsa -out test.key 1024)

p_w_picpath

     从私钥中手动提取公钥: 
  # openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE –pubout

示例:从test.key文件中提取公钥

openssl rsa -in test.key –pubout

p_w_picpath

13)随机数生成器: 
   random, urandom

    熵池(内存中):保存硬件中断产生的随机数,在熵池中供使用。

/dev/random:仅从熵池中返回随机数,当熵池中的随机数耗尽时,取随机数的进程将会被阻塞; 
/dev/urandom:先从熵池中取随机数,当熵池中的随机耗尽时,就通过伪随机数生成器生成随机数;

    伪随机数就是软件(不安全)

14)X.509 v3数字证书的格式:

获取证书的方法: 
   向RA注册申请 
   建立私有CA: 
       OpenSSL 
       OpenCA

15)使用OpenSSL构建私有CA: 
   1、生成私钥; (Winodws安全完成后自带)    
   2、生成自签署证书;(公司范围内使用)

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

配置文件:/etc/pki/tls/openssl.cnf

      cat /etc/pki/tls/openssl.cnf文件

 p_w_picpath

       默认CA是CA_Default,第二行说明CA_default默认CA的定义

   首先是目录为/etc/pki/ca

p_w_picpath

    下面$dir引用 /etc/pki/ca目录,说明其cert目录下是主书

crl(吊销所在目录),签名和持有都数据文件在$dir/index.txt数据库文件中。

新生成证书目录、序列号、吊销编号、CA自己的私钥文件$dir/private/

示例:自己创建CA过程

工作目录:/etc/pki/CA/

  p_w_picpath

   建立私有CA: 
    1、生成私钥文件: /etc/pki/CA/private/cakey.pem

   # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

p_w_picpath

         私钥保存到private目录下的cakey.pem文件

    2、私钥生成自签证书

  # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem –out

/etc/pki/CA/cacert.pem -days 120

        -new: 生成新的证书签署请求; 
        -key:私钥文件路径,用于提取公钥; 
       -days N: 证书有效时长,单位为“天”; 
       -out:输出文件保存位置; 
       -x509:直接输出自签署的证书文件,通常只有构建CA时才这么用;

p_w_picpath

    提示输入国家信息等(二位缩写)CN(注意:主机名要一致)

p_w_picpath

   这里生成CA自己的证书(cacert.pem)

p_w_picpath

    3、提供辅助文件 
   # touch /etc/pki/CA/index.txt   (CA提供索引文件,从01开始)    
   # echo 01 > /etc/pki/CA/serial

p_w_picpath

以上完成自签CA的创建,后续可发给相应程序。

   4、提供给httpd服务提供证书

      @1:创建ssl目录以及私钥(默认长度为1024)为httpd.key文件

p_w_picpath

       @2:创建签名请求(让CA签名)

p_w_picpath

    这里要求与上述httpd配置相同

         @3:将要httpd证书签名请求文件发送给CA证书服务器

  这里测试CA 证书服务器地址为 172.16.16.104

   httpd服务器的地址为172.16.16.105

scp httpd.csr root@172.16.16.104:/tmp/

p_w_picpath

        @4:为httpd证书签名请示,签证书(在CA证书服务器签发)

openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/www.uec.com.c

p_w_picpath

         @5:输入y确定,同时查看index.txt数据库

p_w_picpath

     01代表编号

   p_w_picpath

    这里在newcerts和certs目录中保存证书文件

p_w_picpath  p_w_picpath

    @6:签发完成,返还给httpd服务器端

  p_w_picpath

      以后可以使用ssl目录下的www.uec.com.crt证书进行通信。

16)给节点发证书: 
       1、节点申请证书 
            在证书申请的主机上进行如下步骤: 
            (1) 生成私钥; 
            (2) 生成证书签署请求;

    注意: 
       (a) 其中的subject信息部分,要与CA的保持一致; 
       (b) Common Name要使用此主机在通信真实使用名字;

       (3) 把请求发送给CA;

     2、CA签发证书 
      (1) 验正请求者信息 
      (2) 签署证书 
   # openssl 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

p_w_picpath

    2、实现证书吊销 
        (1) 吊销证书 
  # openssl ca -revoke /PATH/FROM/CRT_FILE

p_w_picpath

       (2) 生成吊销证书的编号 
  echo 01 > /etc/pki/CA/crlnumber

p_w_picpath

     (3) 更新证书吊销列表 
# openssl ca -gencrl -out /etc/pki/CA/crl/aalist.crl

p_w_picpath

   查看更新列表

openssl crl -noout -text -in /etc/pki/CA/crl/aalist.crl

p_w_picpath

     总结:子命令genrsa, req, ca, x509, crl

  博客作业:加密、解密,以及OpenSSL建立私有CA;

回顾过程    
   步骤1:tcp创建虚拟链路以后,进行ssl 握手认证

    步骤2:客户端发送自己支持的各个加密算法并向服务端索取

    服务端证书

   步骤3:服务端收到请求,在众多加密算法中也支持,同时认为比较

    安全的发还给客户端。同时将自己证书发给客户端

    步骤4:客户端验证是那台服务器(拥有私钥的只有自己的服务器)

        A: 服务器的名称与证书中一致、否则拒决

        B:一致判断是否是信息的CA所发(用本地缓存的信任的CA的公钥,

        解密证书后的签名,如果能够解密说明是信任的CA所签发)否则拒绝

        C:再次验证证书的内容是否被篡改过,用单向加密算法计算特征码,与

        解密的特征码是否一致,说明证书内容可接受

        D:检查证书是否在有效期内

        E:检查证书是否被吊销?

        F:经过以上认证是说明证书是有效的

        请求---》响应--》验证完整

    步骤5:客户端从服务器取得公钥,于是生成对称加密密钥,有公钥加密后

      再次发给服务端

    步骤6:服务端拥有的对称密钥,称为密钥交换

    步骤7:双方使用对称密钥进行通信

p_w_picpath

 

第二部分:OpenSSH

    加密、解密的示例

1、原理及定义

1)telnet配置

telnet为明文,传输和密码等过程都为明文,由xinetd超级守护进程管理

  AA:在centos 7中安装需要安装xinetd和telnet-server二个包

p_w_picpath

    BB:telnet启用和重启xinetd守护进程

     (左则为centos 6,右则为 centos 7)

 p_w_picpathp_w_picpath

   CC:ss –tnl 确定tcp 23端口处于listen状态

p_w_picpath 

   DD:centos默认不支持telnet  root用户登陆,使用其它用户登陆即可。但可以

   通过su切换至root用户(iptabls –F 清除防火墙)

2)ssh 简介

  ssh: secure shell (监听端口22/tcp) 代替telnet (23/tcp), rcp, rlogin协议

  ssh protocol:  (    
        v1, v2(目前v2)

3)两种方式的用户认证:    
        基于口令    
        基于密钥:基于公钥加密技术,密钥成对出现,用公钥加密私钥解密。

   公钥不公开,放到服务器端。私钥在本地端。登陆时用私钥加密数据,用

   服务端存储的存储的公钥解密,说明二者是配对的。基于此种方式进行认证。

   这样可以不需要输入口令进行认证。openssh是基于DH算法进行密钥交换的,

   基于rsa或dsa进行身份认证。

4)SSH简单通信模型

p_w_picpath

    第一步:客户端连接服务端时进行验证,这里服务端将证书发给客户端

    客户端通过证书确定是要连接的服务器,服务端自己的身份信息给客户端。

    第二步:客户端接收服务端发过来的信息,这时双方通信完成,但安全性不高

     安全做法:是在服务器初次部署时产生的公钥,在客户端部署时导入公钥信息。

     客户端在连接时导入。这种为安全做法。

     第三步:以上二步完成连接认证,通过DH完成密钥交换,这里客户端与服务端

    有对称密钥。

     第四步:服务端给客户端一个login in登陆认证界面。

     第五步:客户端输入信息发给服务端(这里双方利用加密的对称密码进行通信)

     第六步:服务端解密确定OK,然后客户端将密码加密再次给服务端

           后续所有通信都为加密的

6)SSH C/S架构 

包括服务端与客户端    
   Server: sshd 
   Client: 
       Linux: ssh 
       Windows: 
            xshell 
            putty 
            securecrt    
                ...

7)OpenSSH:

  openssh是ssh的实现    
        sshd: 服务器    
        ssh: 客户端    
        scp: 安全跨主机复制工具,基于ssh协议实现;    
        sftp 安全的FTP功能

       sshd: /etc/ssh/sshd_config  定义如何定义监听套接字提供服务,那个端口等

            AllowUsers,AllowGrops,DenUsers,DenGroups,Port,Protocol

            man sshd_config  
       ssh: /etc/ssh/ssh_config  远程登陆服务器端的选项等,在配置文件中指定

            man ssh_config

AA:ssh命令行客户端: 
    ssh [options] [-l user] host ['COMMAND']   #user为远程主机的用户    
    ssh [options]  [user@]host ['COMMAND']   #如果不使用-l 表示以本机用户登陆    
         -p PORT

示例:

p_w_picpath

示例:返回远程主机命令的执行结果

p_w_picpath

BB:基于密钥认证: 
   在客户端生成一对密钥,私自己留存;公钥通过私密方式保存至要登录的远程服务

某用户的家目录的专用于ssh通信的文件;(只是单向)

    # ssh-keygen -t rsa 
    # ssh-copy-id -i ~/.ssh/id_rsa.put user@host

示例:@1 #ssh-keygen –t rsa  rsa算法,默认保存在家目录隐藏目录中

p_w_picpath

     @2:这里家目录下生成三个文件:id_rsa.pub为公钥,id_rsa为私钥

p_w_picpath

     @3:将公钥文件id_rsa.pub复制到远程主机的家目录

  ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.16.105

p_w_picpath

  @4:验证:利用ssh登陆远程主机

p_w_picpath    
CC:scp远程复制命令: 
  push: scp [-rp] /path/from/somefile user@host:/path/to/somewhere 

          本地文件至远程主机 -r是目录, –p表示保留权限    
  pull: scp [-rp] user@host:/path/from/somefile /path/to/somewhere

          远程文件至本机(拉文件)

            -P(大写) PORT

示例:将本机/etc/fstab文件复制到远程172.16.16.105 /tmp目录

p_w_picpath

  相类:拉文件至本机

p_w_picpath

DD:sshd服务器端的配置: 
      /etc/ssh/sshd_config    
            directive value (指令   值)的形式    
                Port 22    
                Protocol 2

           限制可登录用户: 
               PermitRootLogin : 是否允许管理员直接登录; 
               AllowUsers user1 user2 ... 
               AllowGroups grp1 grp2 ... 
               DenyUsers user1 ... 
               DenyGroups grp1 ...

           仅监听需要监听的IP地址: 
               ListenAddress 0.0.0.0

           使用强密码策略:

               禁用使用空密码

               限制ssh连接次数

               限制ssh最大密码尝试次数

登陆错误所在目录 cat /var/log/secure