zyh3033 发表于 2019-1-26 13:50:46

20150920 加密和解密原理 Open SSL OPEN SSH使用

  第一部分:加密算法和原理   
第一、基础知识
  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)
http://s3.运维网.com/wyfs02/M01/73/FF/wKiom1YLvIaRpUXmAAAn5a8AuSM262.jpg
  双方初次通信时用对方公钥加密,然后对方利用自己的私钥进行解密
  这样双方即可安全通信。称为密钥交换。(密钥加密后存放)
  针对上面IKE方式存在破解可能,利用DH算法进行加密。双方通信之前
  生成一个对称密钥,不需要网上传输
http://s3.运维网.com/wyfs02/M02/73/FF/wKiom1YLvIaCu7TzAAAqWNryYAo351.jpg
  这时双方知道各个需要的密钥。双方通信过程如下:
  
      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证书。
  示意图:
http://s3.运维网.com/wyfs02/M00/73/FF/wKiom1YLvIeC7lhsAAA4se74y4w751.jpg
  第一步:单向加密生成数据指纹
  第二步:使用自己的私钥加特征码附加到数据后
  第三步:再生成一次性对称密钥,将整个数据加密,
  第四步:使用对方的公钥再次将数据加密附加到数据后面。
  左则数据进行加次附加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握手协议。
http://s3.运维网.com/wyfs02/M00/73/FD/wKioL1YLzUiRaGiNAAAcP5i0SEM235.jpg
  @2:向服务器发送多种算法,web server收到请求二者都支持的加密算
  法,同时客户端向服务器请求数字证书(包括使用者的公钥)。
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzUjDaeMwAAAdsYNU4Xs773.jpg
  @3:同时服务端向客户端反馈支持的加密算法和数字证书。这里客户端
  验证服务端的证书是否有效,验证后客户端接受服务端证书
  @4:客户端用接受服务器端的证书保存的公钥信息,加密生成临时的一次性
  会话密钥。发送到服务端
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzUrRFvBSAAAmRSI6qKM846.jpg
  @5:服务端这请把客户端请求的网页等内容以加密的形式返回给客户端。
http://s3.运维网.com/wyfs02/M00/73/FD/wKioL1YLzUqRWrDYAAAmcIDLszM143.jpg
  @6:如果有长链接方式,中间会有不断的数据通信
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzUvgWaWYAAA3v2sPM1M074.jpg
  @7:断开SSL,然后TCP
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzUvQGDHyAABDvoRaIrs311.jpg
  https与http的区别在于创建虚拟链路后进行SSL握手。
  握手完成后http请求和报文,这里发送信息为加密的。
  客户端发送对称加密密钥给服务端。服务端用加密
  信息反馈给客户端。浏览器自动解密予以显示。同时用
  密钥加密请求给服务端,服务端加密响应给客户端。
  最后先断开ssl联接,然后断开tcp链接(四次)
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzU2iPwqiAABJhhcHNmk133.jpg
  第二: 数字证书:
  证书是持有者的详细信息,证书有公钥。包括名称、公钥信息等
  针对证书的防伪信息叫做签名。
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzULiy0FhAABBqWN3K8Y249.jpg
  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   ?#显示支持的命令
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzUPxtphfAADZTtAzbAg888.jpg
  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
  根据提示输入二次密码
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzVDCjAOIAAD5W7x1W0g955.jpg
  @2:生成fstabtest.cert,利用cat 查看,为加密后文件
http://s3.运维网.com/wyfs02/M00/73/FD/wKioL1YLzVGib5sxAAE8Q9kfSck107.jpg
  # 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
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzVKQJbPPAADUI290DSQ906.jpg
  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提取文件特征码
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzVPRxeizAAAxGNsc4aA665.jpg
  方法2:使用openssl计算
  openssl dgst –md5 /etc/fstab(二种方法计算一致)
http://s3.运维网.com/wyfs02/M00/73/FD/wKioL1YLzVOz6s2AAABPxC9wh6U088.jpg
  10)生成用户密码: (-1表示md5单向加密)
  # openssl passwd -1 -salt 8bits随机数
  示例:openssl passwd -1 -salt $(openssl rand -hex 4)
  表示生成用户密码为md5加密的8位16进制数
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzVTSPchOAABArn1K7EQ869.jpg
  11)生成随机数:
    # openssl rand -hex|-base64 NUM
  -hex表示以16进制输出      -base64表示编码格式   NUM表示字节数
  示例:openssl rand –hex 4(
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzVTAPNBUAAAo01B4Qv8926.jpg
  每四位一个16进制数,4个四节为8位16制数 (4个字节为32位,4位1个16进制
  数,这样共需要2个4位16进制数。这样输出为8个16进制数)   rand表示随机数
  也可用以使用-base64 (包括==主要作用对齐格式)有效为前6个
http://s3.运维网.com/wyfs02/M00/73/FD/wKioL1YLzVSQOlitAAApFzs7XsE956.jpg
  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)
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzVWj5H6NAACo9hsHtiE769.jpg
  从私钥中手动提取公钥:
# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE –pubout
  示例:从test.key文件中提取公钥
  openssl rsa -in test.key –pubout
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzVbzRrTlAABuIOh108A912.jpg
  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文件
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzUrjA0w2AAB_EUuRq-E522.jpg
  默认CA是CA_Default,第二行说明CA_default默认CA的定义
  首先是目录为/etc/pki/ca
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzUvzw7xOAAD8CeMIcQQ348.jpg
  下面$dir引用 /etc/pki/ca目录,说明其cert目录下是主书
  crl(吊销所在目录),签名和持有都数据文件在$dir/index.txt数据库文件中。
  新生成证书目录、序列号、吊销编号、CA自己的私钥文件$dir/private/
  示例:自己创建CA过程
  工作目录:/etc/pki/CA/
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzUywM1iOAAA4sOm-V40516.jpg
  建立私有CA:
    1、生成私钥文件: /etc/pki/CA/private/cakey.pem
  # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzVjiB-QqAADrsflab5c036.jpg
  私钥保存到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时才这么用;
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzU3TQsilAADVIM66mXk017.jpg
  提示输入国家信息等(二位缩写)CN(注意:主机名要一致)
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzU6Q4ZnGAADHIZE3aCs359.jpg
  这里生成CA自己的证书(cacert.pem)
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzU6CPAoHAAAzlup6ndA395.jpg
  3、提供辅助文件
   # touch /etc/pki/CA/index.txt   (CA提供索引文件,从01开始)   
   # echo 01 > /etc/pki/CA/serial
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzVuxK4KxAACg0NB9eN8859.jpg
  以上完成自签CA的创建,后续可发给相应程序。
  4、提供给httpd服务提供证书
  @1:创建ssl目录以及私钥(默认长度为1024)为httpd.key文件
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzVuxDnrzAADfgyrIkiM847.jpg
  @2:创建签名请求(让CA签名)
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzVLyjflrAAGOdiIxcKI400.jpg
  这里要求与上述httpd配置相同
  @3:将要httpd证书签名请求文件发送给CA证书服务器
  这里测试CA 证书服务器地址为 172.16.16.104
  httpd服务器的地址为172.16.16.105
  scp httpd.csr root@172.16.16.104:/tmp/
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzVOBUCv6AABqfWJTCsM904.jpg
  @4:为httpd证书签名请示,签证书(在CA证书服务器签发)
  openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/www.uec.com.c
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzVPQooWIAAEuvcCFisg000.jpg
  @5:输入y确定,同时查看index.txt数据库
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzVSAL-MUAACaq8dZUnA749.jpg
  01代表编号
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzWCCjhHlAAA_o5MK-vU547.jpg
  这里在newcerts和certs目录中保存证书文件
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzWGD3FilAABrTAb43VI737.jpghttp://s3.运维网.com/wyfs02/M00/73/FD/wKioL1YLzWLClKcyAABhQZFieCI317.jpg
  @6:签发完成,返还给httpd服务器端
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzVez3c-LAABAKsHS-KM951.jpg
  以后可以使用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
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzVeSRf0sAABVyLei46I799.jpg
  2、实现证书吊销
      (1) 吊销证书
# openssl ca -revoke /PATH/FROM/CRT_FILE
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzVjACN7nAAB4WPkOVtg697.jpg
  (2) 生成吊销证书的编号
echo 01 > /etc/pki/CA/crlnumber
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzViSTnU6AAA0N3LWs44687.jpg
  (3) 更新证书吊销列表
# openssl ca -gencrl -out /etc/pki/CA/crl/aalist.crl
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzWSgQUhHAACDHRFP9DE864.jpg
  查看更新列表
  openssl crl -noout -text -in /etc/pki/CA/crl/aalist.crl
http://s3.运维网.com/wyfs02/M02/73/FD/wKioL1YLzWjj5vxwAAGsnary2Jk194.jpg
  总结:子命令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:双方使用对称密钥进行通信
http://s3.运维网.com/wyfs02/M01/73/FD/wKioL1YLzWmQjdGEAABWCgNPD2U774.jpg
  第二部分:OpenSSH
  加密、解密的示例
  1、原理及定义
  1)telnet配置
  telnet为明文,传输和密码等过程都为明文,由xinetd超级守护进程管理
  AA:在centos 7中安装需要安装xinetd和telnet-server二个包
http://s3.运维网.com/wyfs02/M01/74/00/wKiom1YLzV6gnuBsAACPw-p_SLc768.jpg
  BB:telnet启用和重启xinetd守护进程
  (左则为centos 6,右则为 centos 7)
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzV-ziRooAAA9Ag2W1fc041.jpghttp://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzV_RvEy0AAB1n1hlCak091.jpg
  CC:ss –tnl 确定tcp 23端口处于listen状态
http://s3.运维网.com/wyfs02/M00/73/FE/wKioL1YLzWyjfmpsAABCrsRS3s0456.jpg
  DD:centos默认不支持telnetroot用户登陆,使用其它用户登陆即可。但可以
  通过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简单通信模型
http://s3.运维网.com/wyfs02/M01/73/FE/wKioL1YLzWzjPlg1AAAmEiujHIA821.jpg
  第一步:客户端连接服务端时进行验证,这里服务端将证书发给客户端
  客户端通过证书确定是要连接的服务器,服务端自己的身份信息给客户端。
  第二步:客户端接收服务端发过来的信息,这时双方通信完成,但安全性不高
  安全做法:是在服务器初次部署时产生的公钥,在客户端部署时导入公钥信息。
  客户端在连接时导入。这种为安全做法。
  第三步:以上二步完成连接认证,通过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 [-l user] host ['COMMAND']   #user为远程主机的用户   
    ssh host ['COMMAND']   #如果不使用-l 表示以本机用户登陆   
         -p PORT
  示例:
http://s3.运维网.com/wyfs02/M02/73/FE/wKioL1YLzW3ho158AABrLaoOjno428.jpg
  示例:返回远程主机命令的执行结果
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzWKhIK3vAADu24vathc208.jpg
  BB:基于密钥认证:
   在客户端生成一对密钥,私自己留存;公钥通过私密方式保存至要登录的远程服务
  某用户的家目录的专用于ssh通信的文件;(只是单向)
  # ssh-keygen -t rsa
    # ssh-copy-id -i ~/.ssh/id_rsa.put user@host
  示例:@1 #ssh-keygen –t rsarsa算法,默认保存在家目录隐藏目录中
http://s3.运维网.com/wyfs02/M00/73/FE/wKioL1YLzW7yx8yEAACBfEmpDvk205.jpg
  @2:这里家目录下生成三个文件:id_rsa.pub为公钥,id_rsa为私钥
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzWOC8R7jAABPojW7vB0744.jpg
  @3:将公钥文件id_rsa.pub复制到远程主机的家目录
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.16.105
http://s3.运维网.com/wyfs02/M01/73/FE/wKioL1YLzW_QOHDYAAB2edzrDq4433.jpg
  @4:验证:利用ssh登陆远程主机
http://s3.运维网.com/wyfs02/M02/74/00/wKiom1YLzWSzM44oAABFqaU2ZVQ674.jpg   
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目录
http://s3.运维网.com/wyfs02/M00/74/00/wKiom1YLzWahATN9AABG7etVXPw694.jpg
  相类:拉文件至本机
http://s3.运维网.com/wyfs02/M01/73/FE/wKioL1YLzXWirlqWAABINwcQW7M307.jpg
  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



页: [1]
查看完整版本: 20150920 加密和解密原理 Open SSL OPEN SSH使用