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.www58058.com/77269

(0)
ss
上一篇 2017-05-31 20:02
下一篇 2017-05-31 20:25

相關推薦

  • iptables基礎概念

    iptables基本概念梳理 前言 netfilter/Iptables (其中包括netfilter和Iptables兩個組件)組 成了Linux平臺下的包過濾防火墻,它與大多數的Linux自帶軟 件一樣,這個防火墻是免費提供的,它可以代替昂貴的企業級 防火墻來解決實際問題與實際方案,完成封包過濾,封包重定 向和網絡地址轉換等功能。 一、工作原理 數據包從…

    Linux干貨 2016-12-19
  • 壓縮、解壓縮和歸檔工具

    1  compress和uncompress 用法:     compress [-dfvcVr] [-b maxbits] [file…] 選項:     -d   解壓縮     -c   結果…

    Linux干貨 2016-08-18
  • N26-博客作業-week16

    1、源碼編譯安裝LNMP架構環境 IP:192.168.12.137 Nginx:1.8.1 MariaDB:5.5.57 PHP:5.6.31 安裝開發環境包組 yum groupinstall “Development Tools” “Server Platform Development” -y 安裝開發程序包 yum install pcre-dev…

    2017-08-04
  • bash腳本基礎認知

    編程基礎:程序:指令+數據                過程式:以指令為中心,數據服務于指令              &nbs…

    Linux干貨 2017-03-02
  • 新的開始

    加入馬幫,新的開始,加油!

    Linux干貨 2016-09-19
  • class15磁盤管理(二) 高級磁盤管理(一)

    掛載點和/etc/fstab 配置文件系統體系 被mount、fsck和其它程序使用 系統重啟時保留文件系統體系 可以在設備欄使用文件系統卷標 使用mount -a命令掛載  /etc/fstab 中的所有文件系統 文件掛載配置文件 /etc/fstab每行定義一個要掛載的文件系統;   &nbsp…

    Linux干貨 2016-09-05
欧美性久久久久