Linux学习日志(十五)

加密解密及CA

加密方式:

对称加密、公钥加密、单向加密
加密、解密
明文:plaintext,cleartext -->密文 -->

对称加密:

   加密算法+口令
      明文 --> 密文

      字典攻击
      加密方,解密方使用同一个口令
      DES(56bits):数据加密标准
      3DES
      AES(128bits):高级加密标准
      Blowfish
      Twofish
      IDEA
      RC6
      CAST5
      Serpent
 特性:
      1.加密/解密使用统一口令
      2.将原文分割成固定大小的数据块,对这些块进行加密
        ECB,CBC

      1.口令传输
      2.密钥太多

    密钥交换:
    用户认证:
    数据完整性:

密钥交换(IKE:Inernet Key Exchange):DH算法

非对称加密

  加密算法:RSA,EIGmal,DSA
  1.密钥交换
  2.用户身份认证
单向加密:
 抽取数据特征码:
   MD5,SHA1,SHA512,CRC-32(循环冗余校验码)
  1.完整性,

  消息认证算法:MAC(Message Authenntication Codes)
    CBC-MAC
    HMAC

    雪崩效应
    定长输出:

PKI:Pubile key Infrastucture 公钥基础设施

openssl gpg

openssl:套件,开源软件

 libcrypto:通用功能的加密库
 libssl:用于实现TLX/SSL的功能
 openssl: 多功能命令工具
            生成密钥,创建数字证书,手动加密解密数据

加密解密技术常用的功能及算法:

对称加密:

 工具:gpg openssl enc
 加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
 解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher  -out 文件

单向加密:

 特性:One-Way
       Collision-free:
 算法
   md5:128bits
  sha1:160bits
  sha512:512bits
 工具:sha1sum,md5sum,openssl dgst
  openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile

MAC:信息摘要码,单向加密的延伸应用

   应用:用于实现在网络通信中保证所传输的数据完整性
   机制:
       CBC-MAC
       HMAC:使用md5和sha1算法
用户认证:
   工具:passwd openssl passwd

公钥加密:公钥加密,私钥解密
   密钥对:
      公钥:pkey
      私钥:skey

   算法:RSA,EIGamal

   工具:gpg openssl rsautl

数字签名:私钥加密,公钥解密

   算法:RSA,EIGamal,DSA

   DSA:Digital Signature Algorithm
   DSS: Digital Signature standard

密钥交换:IKE
     算法:DH(Diffie-Hellman),公钥加密


数字证书:
  第三方机构使用一种安全的方式把公钥分发出去
  证书格式:x509,pkcs家族
     x509格式:
       公钥和有效期限:
       持有者的个人合法身份信息;(主机名)
       证书的使用方式
       CA的信息
       CA的数字签名

    谁给CA发证:自签署证书

用openssl实现私有CA

服务器端:

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

   (centos 5 需要更改)

2.生成密钥对儿:

        # (umask 077; openssl genrsa -out private/cakey.pem 2048)
    如果想查看公钥:
            # openssl rsa -in private/cakey.pem -pubout -text -noout

3.生成自签证书

        # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

4.创建需要的文件:

        # touch index.txt serial crlnumber

5.接收到客户端的信息后

1)CA签署证书

   签署:# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS

 2) 将证书传回请求者


 ##吊销证书:

    # openssl ca -revoke /path/to/somefile.crt 
客户端端:

用openssl实现证书申请:
1.在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:

        # mkdir /etc/httpd/ssl
        # cd /etc/httpd/ssl
        # (umask 077; openssl genrsa -out httpd.key 1024)

2.生成证书签署请求:
# openssl req -new -key httpd.key -out httpd.csr

3.将请求文件发往CA;

openssl补充材料:

openssl中有如下后缀名的文件

    .key格式:私有的密钥
    .crt格式:证书文件,certificate的缩写
    .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
    .crl格式:证书吊销列表,Certificate Revocation List的缩写
    .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

常用证书协议

    x509v3: IETF的证书标准
    x.500:目录的标准
    SCEP:  简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
    PKCS#7:  是封装数据的标准,可以放置证书和一些请求信息
    PKCS#10:  用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
    PKCS#12:  用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

ssh:Secure SHell

 监听tcp协议的22号端口
 /etc/services 解析库,进程<->端口
   ssh文本协议:字符通信

sshv1,sshv2

由于sshv1是居于CRC-32做MAC,因此,不安全,建议勿用
sshv2 基于双发主机协商选择最安全的MAC实现机制
   加密机制和MAC机制是双方协商选定
   基于DH实现密钥交换,基于RSA或DAS实现身份认证
   客户端通过检查服务端的主机密钥来判断是否与其进一步通信 

OpenSSH(C/S)

   Server:监听tcp22
   Client:程序
   windows客户端:xmanager(xshell)、SecureCRT、putty、sshshellcilent

openssh客户端组件:

ssh
   ssh Username@HOST [command]
   ssh -l Username HOST [command]
       -p port:指定要连入端口

ssh认证机制:
   基于口令
   基于密钥
      客户端在本地生成一对密钥
      客户端将公钥复制到服务器,要登陆的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2中
   配置过程:
     1.生成密钥对,客户端
        ssh-key -t rsa
         生成的密钥默认保存至当前家目录下的.ssh下的id_rsa,公钥在id_rsa.pub
      文件中
      2.复制密钥至远程主机:
         ssh-copy-id -i 公钥文件 登陆用户@远程ip地址

相关配置文件:

   配置文件 /etc/ssh/sshd_config
   服务脚本 /etc/rc.d/init.d/sshd
   脚本配置文件:/etc/sysconfig/sshd

查看config文件的帮助

   man sshd_config
   ListernAddress 当前主机的监听地址
   Protocol 协议版本
   # HostKeys for protocol version 2
   #HostKey /etc/ssh/ssh_host_rsa_key
   #HostKey /etc/ssh/ssh_host_dsa_key
   验证主机的公钥
   #KeyRegenerationInterval 1h  密钥的使用时间
   #ServerKeyBits 1024 密钥长度
   #LogLevel INFO 日志级别
   #LoginGraceTime 2m 登陆宽限期
   #PermitRootLogin yes root是否可以登录
   #StrictModes yes 严格模式,家目录 属主 属组
   #MaxAuthTries 6 最多可以承受的次数
   #MaxSessions 10
   最大的连接数
   PasswordAuthentication yes 是否使用用户名和密码的方式
   Kerberos集中认证管理
   X11Forwarding yes 是否转发图形窗口
   AllowUsers user1 user2
   用户白名单
   Allowgroups 组白名单
   DenyUser 用户黑名单

###使用ssh的最佳实践

    1)only use ssh protocol 2
    2)limit users SSh access
        Allowusers root vivek jerry
        白名单
        denyUser saroj anjali foo
        黑名单
    3)configure  Idle Log out timeout Interval 配置空闲超时长。
        ClientAliveCountMax 300
        ClientAliveInterval  0
    4)Firwall SSH Port # 22
        使用iptables设置ssh服务安全访问策略
    5)change ssh port and Limit IP binding
        port 300
        Listaddress 192.168.1.5
        ListenAddress 202.54.1.5
        勿使用默认22端口

    6)use Strong SSH passwords and passphrase
        genpasswd(){
            local 1=$1
                [ "$1" == "" ]&& 1=20
                tr -dc A-Za-z0-9_

scp:类cp命令,基于ssh协议跨主机复制

scp SRC1 SRC2 …. DEST

分两种情况:

 1.源文件在本机,目标为远程

     scp /path/to/somefile ....  Username@HOST:/path/to/somewhere

 2.源文件在远程,目标在本机

      scp Username@HOST:/path/to/somefile /path/to/somewhere

     -r:当源文件为目录,以实现递归复制
     -p:保留源文件的复制及修改时间戳,以及权限
     -q:静默模式
     -P PORT:指定服务器端口

sftp:是基于ssh的ftp协议

 只要OpenSSH的服务器端有以下项,则代表支持sftp
 Subsystem  sftp    /usr/libexec/openssh/sftp-server

 用法: sftp[username@]HOST

用户登录信息获取

 /var/log/wtmp:显示用户最近一次的登录信息,成功的 last
 /var/log/btmp:显示用户登录的信息,并尝试失败的   lastb

 lastlog:每个用户最近一次成功登陆的信息

bash编程的信号捕获

  trap 陷阱
  trap ‘command’ signal
  kill -l
  KILL无法捕捉

  信号捕捉用于:在中途中止时做一些清理操作
  使用失列
     #!/bin/bash
     #
     Clean(){
         echo "quit"
         return 5
     }
     tarp  'echo "quit"; eixt 5' IN

     for i in {1..254};do 
          if ping -w 1 -c 1 172.16.254.$i $> /dev/null;then
             echo "172.16.254.$i is up"
          else 
             echo "172.16.254.$i is down" 
           fi 

     done

你可能感兴趣的:(Linux学习日志)