openssl、openssh

openssl

  • 传输层协议:TCP,UDP,SCTP
    port:进程地址,进程向内核注册使用某端口(独占)

    • 同一主机上的进程间通信:IPC, message queue, shm, semerphor
    • 不同主上的进程间通信:socket
      cip:port <– –> sip:port
      cip:55673 <– –> sip:80
  • 安全的目标:
    保密性:confidentiality
    完整性:integrity
    可用性:availability

  • 攻击类型:
    威胁保密性的攻击:窃听、通信量分析;
    威胁完整性的攻击:更改、伪装、重放、否认
    威胁可用性的攻击:拒绝服务(DoS)

  • 解决方案:
    技术(加密和解密)、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)

    • 加密和解密:
      传统加密方法:替代加密方法、置换加密方法
      现代加密方法:现代块加密方法
    • 服务:
      认证机制
      访问控制机制

密钥算法和协议

  • 对称加密
    公钥加密
    单向加密
    认证协议

  • 对称加密:加密和解密使用同一个密钥;
    DES:Data Encryption Standard;
    3DES:Triple DES;
    AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)
    Blowfish
    Twofish
    IDEA
    RC6
    CAST5

    • 特性:
      1、加密、解密使用同一个密钥;
      2、将原始数据分割成为固定大小的块,逐个进行加密;

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

  • 公钥加密:密钥分为公钥与私钥

    • 公钥:从私钥中提取产生;可公开给所有人;public key
    • 私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;

    • 特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;

    • 用途:
      数字签名:主要在于让接收方确认发送方的身份;
      密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
      数据加密

    • 算法:RSA, DSA, ELGamal
      DSS: Digital Signature Standard
      DSA:Digital Signature Algorithm

  • 单向加密:即提出数据指纹;只能加密,不能解密;

    • 特性:定长输出、雪崩效应;
    • 功能:完整性;
    • 算法:
      md5:Message Digest 5, 128bits
      sha1:Secure Hash Algorithm 1, 160bits
      sha224, sha256, sha384, sha512
  • 密钥交换: IKE(Internet Key Exchange)

    • 公钥加密

      • 加密和发送过程:
        1、发送方使用单向加密的算法,计算出数据的特征码
        2、发送方用自己的私钥加密这段特征码,并将结果附加到数据后面;
        3、发送方生成一个临时的对称密钥,并使用对称密钥加密这整段数据
        4、发送方获取到接收方的公钥,并使用对方的公钥加密刚才生成的临时的对称密钥,并附加到整个数据后面;
        5、把整个数据发送给接收方;

      • 解密过程:
        1、接收方先使用自己的私钥解密这段加密了的对称密钥
        2、用对称密钥解密这整段加密的内容
        3、用发送方的公钥去解密数据内的特征码,能解密说明发送方的身份得到验证
        4、接收方再用同样的对称加密算法,去计算这段数据的特征码,并与解密出来的特征码进行比较;如果相同,数据的完整性的到验证;否则,说明数据出现了问题
        5、所以,保密性、完整性同时完成了身份验证;

      • 此加密解密的过程过程仍然有漏洞,因为接受和发送双方都不知道对方,会产生中间人攻击;
        漏洞:双方无法可靠获取对方的公钥;因此,产生了双方公认的第三方可靠机构CA;

    • DH(Deffie-Hellman)

      A:p, g
          B:p, g
      
          A: x
          --> p^x%g ==> B
      
          A: (p^y%g)^x=p^yx%g
      
          B: y
          --> p^y%g ==> A 
      
          B: (p^x%g)^y=p^xy%g

PKI:Public Key Infrastructure

  • 公钥基础设施:
    签证机构:CA
    注册机构:RA
    证书吊销列表:CRL
    证书存取库:

  • X.509v3:定义了证书的结构以及认证协议标准
    版本号
    序列号
    签名算法ID
    发行者名称
    有效期限
    主体名称
    主体公钥
    发行者的惟一标识
    主体的惟一标识
    扩展
    发行者的签名

  • 公钥加密中的验证证书的内容:
    证书的签发者
    证书的内容
    证书在有效期内
    证书内的名字和要通信的主机的名字要保持一致
    证书没有被吊销

SSL:Secure sockets Layer

Netscape: 1994
V1.0, V2.0, V3.0

  • SSL会话主要三步:
    客户端向服务器端索要并验正证书;
    双方协商生成“会话密钥”;
    双方采用“会话密钥”进行加密通信;

    • 第一阶段:ClientHello:
      支持的协议版本,比如tls 1.2;
      客户端生成一个随机数,稍后用户生成“会话密钥”
      支持的加密算法,比如AES、3DES、RSA;
      支持的压缩算法;

    • 第二阶段:ServerHello
      确认使用的加密通信协议版本,比如tls 1.2;
      服务器端生成一个随机数,稍后用于生成“会话密钥”
      确认使用的加密方法;
      服务器证书;

    • 第三阶段:
      验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
      发送以下信息给服务器端:
      一个随机数;
      编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
      客户端握手结束通知;

    • 第四阶段:
      收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
      向客户端发送如下信息:
      编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
      服务端握手结束通知;

TLS: Transport Layer Security

IETF: 1999
V1.0, V1.1, V1.2, V1.3

  • 分层设计:
    1、最底层:基础算法原语的实现,aes, rsa, md5
    2、向上一层:各种算法的实现;
    3、再向上一层:组合算法实现的半成品;
    4、用各种组件拼装而成的各种成品密码学协议软件;

协议的开源实现:OpenSSL

  • OpenSSL由三部分组成:
    libencrypto库
    libssl库
    openssl多用途命令行工具
    libcrypto, libssl主要由开发者使用;
    openssl:多用途命令行工具;

  • 许多子命令,分为三类:
    标准命令
    消息摘要命令(dgst子命令)
    加密命令(enc子命令)

    • 标准命令: enc, ca, req, genrsa, …

    • 对称加密:
      工具:openssl enc, gpg
      支持的算法:3des, aes, blowfish, towfish

      • enc命令:
        加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
        解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
    • 单向加密:
      工具:openssl dgst, md5sum, sha1sum, sha224sum, …

      dgst命令:
      ~]# openssl dgst -md5 /PATH/TO/SOMEFILE

    • 生成用户密码:
      工具:passwd, openssl passwd

      openssl passwd -1 -salt SALT

      • 生成随机数(SALT):
        工具:openssl rand

        ~]# openssl rand -hex NUM
        ~]# openssl rand -base NUM

    • 公钥加密:

      • 加密解密:
        算法:RSA,ELGamal
        工具:openssl rsautl, gpg
      • 数字签名:
        算法:RSA, DSA, ELGamal
        工具:openssl rsautl, gpg
      • 密钥交换:
        算法:DH
      • 生成密钥:

        • 生成私钥: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
        • 提出公钥: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
  • Linux系统上的随机数生成器:

    • /dev/random:仅从熵池返回随机数;随机数用尽,阻塞;

    • /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不安全;

    • 熵池中随机数的来源:
      硬盘IO中断时间间隔;可利用拷贝数据增加随机数;
      键盘IO中断时间间隔;可连续敲击键盘增加随机数;

CA

  • 建立私有CA:
    openssl
    OpenCA(从openssl发展而来)

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

  • 在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
    步骤:

    1. 生成私钥;

      ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
    2. 生成自签证书;

      ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
                           -new:生成新证书签署请求;
                           -x509:生成自签格式证书,专用于创建私有CA时;
                           -key:生成请求时用到的私有文件路径;
                           -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
                           -days:证书的有效时长,单位是day;
    3. 为CA提供所需的目录及文件;

      ~]# mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts} (centos 6上使用,7上自己生成)
       ~]# touch  /etc/pki/CA/{serial,index.txt}
       ~]# echo  01 > /etc/pki/CA/serial
  • 要用到证书进行安全通信的服务器,需要向CA请求签署证书:
    步骤:(以httpd为例)

    1. 用到证书的主机生成私钥;

      ~]# mkdir  /etc/httpd/ssl 
      ~]# cd  /etc/httpd/ssl
      ~]# (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)
    2. 生成证书签署请求

      ~]# openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out /etc/httpd/ssl/httpd.csr  -days  365

      证书签署请求中主要是个人信息;密码可以不用设置,主要是保护个人信息,如设置则需将密码交给CA机构;

    3. 将请求通过可靠方式发送给CA主机;

    4. 在CA主机上签署证书;

      ~]# openssl ca  -in  /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365

      查看证书中的信息:

      ~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject
  • 吊销证书:
    步骤:

    1. 客户端获取要吊销的证书的serial(在使用证书的主机执行):
      ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
    2. CA主机吊销证书
      先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
      吊销:
      ~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
      其中的SERIAL要换成证书真正的序列号;

    3. 生成吊销证书的吊销编号(第一次吊销证书时执行)
      ~]# echo 01 > /etc/pki/CA/crlnumber

    4. 更新证书吊销列表
      ~]# openssl ca -gencrl -out thisca.crl
      查看crl文件:
      ~]# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

Openssh

telnet:

  • C/S,23/tcp
    telnet的登录,使用普通用户登录;有必要时使用su|sudo切换至root用户;

    • CentOS 6:
      Server: telnet-server
      Client: telnet
      服务进程有两种类型:
    • 独立守护进程:自我管理;
    • 超级守护进程:xinetd,服务器托管者,用于托管其它瞬时守护进程;自己是独立守护进程;
      瞬时守护进程:非自我管理,而是由“超级守护进程”代为管理;
      xinetd配置文件:/etc/xinetd.conf, /etc/xinetd.d/*

    • CentOS 7:(telnet由systemd托管)
      Server: telnet-server
      Client: telnet

ssh

  • ssh:Secure SHell,
    C/S: 22/tcp,安全地远程登录

    • Server:OpenSSH(sshd)
      Client:OpenSSH(ssh, scp),

      • Windows: xshell, securecrt, sshsecureshellclient, putty;
    • ssh protocol version:
      V1:不安全, man-in-middle
      V2:

    • 主机认证:需要用到主机认证密钥;由服务器端维护和提供;
      用户认证:

      • 基于口令的认证;
        基于密钥的认证;

      用户提供一对儿密钥,私钥保留在客户端,公钥保留于远程服务器端的用户家目录下;

OpenSSH:

  • sshd:配置文件 /etc/ssh/sshd_config
    ssh: 配置文件 /etc/ssh/ssh_config

  • 客户端程序:
    ssh [options] [user@]host [COMMAND]
    ssh [-l user] [options] host [COMMAND]

    • 省略用户名:使用本地用户名作为远程登录的用户名;

    • 常用选项:
      -l user:以指定的用户登录远程主机;
      -p port:用于指明远程服务器的端口;
      -X:支持X11转发;
      -Y:支持信任的X11转发;

      • X:协议; x-window, C/S
        X11转发的作用:在本地显示远程主机上的图形窗口;前提:本地是X图形界面,或者提供了x service;

      -o StrictHostKeyChecking=no

    • 接收的所有认可的服务器列表:
      ~/.ssh/known_hosts

    • ssh远程连接服务器时的配置选项,定义在/etc/ssh/ssh_config配置文件中;HOST patttern

    • ssh支持的用户认证方式:

      • 基于口令的认证;
        基于密钥的认证;

        1. 在本地主机生成一对儿密钥:
          ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]
          -t {rsa|ecdsa|dsa}:公钥加密算法类型;
          -b bits:指明密钥长度;
          -P passphrase:私钥加密密码;
          -f output_keyfile:生成密钥的保存位置;

        2. 在本地主机上,将公钥复制到要登录的远程主机的某用户的家目录下的特定文件中(~/.ssh/authorized_keys)
          ssh-copy-id [-i [identity_file]] [-p port] [-o ssh_option] [user@]hostname

        3. 测试
          ssh user@host

  • scp命令: 基于ssh连接完成复制
    scp [options] SRC… DEST/
    scp [options] SRC DEST

    • 存在两种使用情形:
      PULL: scp [options] [user@]host:/PATH/TO/SOMEFILE /PATH/TO/SOMEFILE
      PUSH: scp [options] /PATH/TO/SOMEFILE [user@]host:/PATH/TO/SOMEFILE

      • 常用选项:
        -r:递归复制;
        -p:保持原文件的权限信息;
        -q:静默模式;
        -P PORT:指明远程主机ssh协议监听的端口;
  • sftp命令:
    ftp:file transfer protocol,是一种明文传输;

    • 安全的文件传输机制:
      ftps: ftp over ssl
      sftp: ftp over ssh
    • sftp:
      C/S架构
      S:由sshd服务进程管理,是sshd的一个子系统,在centos系统上的openssh上,默认为启动状态; /usr/libexec/openssh/sftp-server
      C:即sftp;
    • 连接至远程主机: sftp user@host
  • sshd(服务器端):

    • 配置文件:/etc/ssh/sshd_config

      • 格式:配置指令 值
        常用指令:
        Port 22
        ListenAddress 0.0.0.0
        Protocol 2
        PermitRootLogin yes
        UseDNS no

      • 手册页:
        man sshd_config
        man sshd
        man ssh_config
        man ssh

      • 限制可登录的用户(配置文件):
        AllowUsers user1 user2 user3 …
        AllowGroups grp1 grp2 …
        DenyUsers user1 user2 …
        DenyGroups grp1 grp2 …

    • CentOS 6:
      服务脚本:/etc/rc.d/init.d/sshd

    • CentOS 7:
      Systemd Unit File:/usr/lib/systemd/system/sshd.service

  • 并行的客户端工具:
    pssh: epel
    pssh
    pscp

  • ssh协议的另一个实现:dropbear
    轻量化的实现方案,多用于嵌入式环境中;

    • 常用工具:

      • dbclient:ssh协议客户端程序
        dbclient [options] [user@]host[/port][,[user@]host/port],…] [command]
      • dropbearkey:主机密钥生成工具
        dropbearkey -t -f [-s bits]
        /etc/dropbear/
  • 服务端程序:
    dropbear
    -p [IP:]PORT
    -F: 前台
    -E:将日志发往错误输出

  • ssh服务的使用:

      1、不要使用默认端口;
      2、禁止使用protocol version 1;
      3、限制可登录的用户;
      4、设定空闲会话超时时长;
      5、利用防火墙设置ssh访问策略;
      6、仅监听特定的IP地址;
      7、基于口令认证时,使用强密码策略;
          # tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
      8、使用基于密钥的认证;
      9、禁止使用空密码;
      10、禁止root用户直接登录;
      11、限制ssh的访问频度和并发在线数;
      12、做好日志,经常分析; /var/log/secure

原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/77269

(0)
ss
上一篇 2017-05-31
下一篇 2017-05-31

相关推荐

  • nginx负载均衡实验

    实验一、 实验环境:     1、一台director主机。并部署nginx服务。        内网iP:192.168.1.1  外网iP:10.1.64.1     2、一台后端服务器。并部署h…

    Linux干货 2016-10-30
  • N21_第7周_磁盘及文件系统管理

    N21_第7周_磁盘及文件系统管理 作业题目: 1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳…

    Linux干货 2016-09-26
  • N22-北京-追求极境之人-RSYNC差分编码同步原理

    1客户端发送自己的filelist,filelist包含文件hashindexid(alert32)和关联的文件chunkChecksum(MD5)和hashindexID以便进行快速查找,chunksize根据文件大小进行等分,不足均值部分直接发送不进行MD5校验值生成 发送进程一次从生成器读取一个文件索引号和关联的块校验集合 2对于生成器发送的每个文件I…

    Linux干货 2016-08-22
  • grep的用法(CentOS7)及有关正则表达式的使用

    http://www.cnblogs.com/wzhuo/p/6659352.html

    Linux干货 2017-04-08
  • 第十三周作业

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;  3)添加sa…

    Linux干货 2017-04-04
  • 浅谈DNS基本原理以及实现方法(一)

     DNS(Domain Name System,域名系统),是目前互联网上最不可或缺的服务器之一,我们在互联网从访问一个网站,到发送一封电子邮件,再到定位域中的域控制器,无时无刻不再使用着DNS为我们提供的服务,那为什么我们会需要这样一个服务那?带着这样一个疑问让我们先来认识一下什么是DNS吧  DNS最核心的工作就是域名解析,也就是把计…

    Linux干货 2015-12-15