天天看點

加解密,OpenSSL,OpenSSH

OpenSSL:

資料加密: SSL: Secure Socket Layer

NIST:

    保密性:

        資料保密性

        隐私性

    完整性:

        資料完整性

        系統完整性

    可用性:

OSI: x.800

    安全攻擊:

        被動攻擊:監聽

        主動攻擊:僞裝、重放、消息篡改、拒絕服務

    安全機制:

        加密/解密、數字簽名、通路控制、資料完整性、認證交換、流量填充、路由控制、公證

    安全服務:

        認證

        通路控制

    資料保密性

        連接配接保密性

        無連接配接保密性

        選擇域保密性

        流量保密性

    資料完整性

    不可否認性

安全機制:PKI:public Key Infrastructure

密碼算法和協定:

    對稱加密

    公鑰加密

    單向加密

    認證協定

加密算法和協定:

    對稱加密:加密和解密使用同一個密鑰;

        依賴于:算法和密鑰;

            安全性依賴于密鑰,而非算法;

    常見算法:

        DES:Data Encryption Standard, 56bits

        3DES: 

        AES: Advanced Encrpytion Standard, (128bits, 192, 256, 384, 512bits)

        Blowfish

        Twofish

        IDEA

        RC6

        CAST5

    特性:

        1、加密、解密使用同一密鑰;

        2、将明文分隔成固定大小的塊,逐個進行加密;

    缺陷:

        1、密鑰過多;

        2、密鑰分發;

非對稱加密:公鑰加密

    公鑰從私鑰中提取而來;使用公鑰加密的資料,隻能使用與此公鑰配對兒的私鑰解密;反之亦然;   

    密鑰對兒:私鑰和公鑰

    私鑰:secret key,僅允許個人使用;

    公鑰:public key,公開給所有擷取;

    用處:

    身份認證:私鑰擁有者用自己的私鑰加密的資料,隻要用其公鑰能解密,即可認證其身份;

    密鑰交換:與被通信方通信之前,首先擷取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,并發送給對方;

    資料加密:

    算法:

        RSA

        DSA

        ELGamal

        1、密鑰長度較大,例如512bits, 2048bits, 4096bits

        2、加密解密分别使用密鑰對兒中的密鑰相對進行;

        3、常用于數字簽名和密鑰交換;

單向加密:提出資料的特征碼;

    1、定長輸出:無論原來的資料是多大級别,其加密結果長度一樣;

    2、雪崩效應:原始資料微小改變,将會導緻結果巨大變化;

    3、不可逆:

    MD5:128bits定長輸出;

    SHA1:160bits定長輸出;

    SHA256

    SHA384

    SHA512:

    CRC32

加解密,OpenSSL,OpenSSH

        1、資料完整性;

密鑰交換:IKE (Internet Key Exchange)

    DH (Deffie-Hellman)

        A:P,G

            X

        P^X%G

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

        B:

        公開:P,G

        私有:Y

        P^Y%G

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

一次加密通信過程(數字信封)

    發送者:

    1、使用單向加密算法提取生成資料的特征碼;

    2、使用自己的私鑰加密特征碼附加在資料後面;

    3、生成用于對稱加密的臨時密鑰;

    4、用此臨時密鑰加密資料和已經使用私鑰加密後的特征碼;

    5、使用接收方的公鑰加密此臨時密鑰,附加在對稱加密後的資料後方;

    接收方:

    1、使用自己的私鑰解密加密的臨時密鑰;進而獲得對稱密鑰;

    2、使用對稱密鑰解密對稱加密的 資料和私鑰加密的特征碼密文;進而獲得資料和特征碼密文;

    3、使用發送方的公鑰解密特征碼密文,進而獲得從計算生成的特征碼;

    4、使用與對方同樣的單向加密算法計算資料的特征碼,并與解密而來的進行比較;

SSL:secure socket layer

    sslv1, sslv2, sslv3,

    IETF: tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3

數字證書:

    CA:簽證機構

    功用:保證公鑰資訊安全分發;

    數字證書的格式(x.509 v3):

        版本号(version)

        序列号(serial number):CA用于惟一辨別此證書;

        簽名算法标志(Signature algorithm identifier)

        發行者的名稱:即CA自己的名稱;

        有效期:兩個日期,起始日期和終止日期;

        證書主體名稱:證書擁有者自己的名字

        證書主體公鑰資訊:證書擁有者自己的公鑰;

        發行商的惟一辨別:

        證書主體的惟一辨別:

        擴充資訊:簽名:CA對此證書的數字簽名;

    證書通常有兩類用途:

    使用者證書

    主機證書(httpd)

    撤消證書:

PKI: Public Key Infrastructure

    簽證機構:CA

    注冊機構:RA

    證書吊銷清單:CRL

    證書存取庫:

openssl的組成部分:

    libcrypto:加密、解密庫檔案;

    libssl: ssl協定實作

    openssl:多用途指令行工具,每種功能都使用專用的子指令來實作

gpg: GNU Privarcy Guard,是pgp規範的實作;

openssl: 

    子指令分類:

    标準指令

    消息摘要指令

    加密、解密相關的指令

加解密,OpenSSL,OpenSSH

加密檔案(對稱加密):

    工具:openssl enc, gpg

    算法:des, 3des, aes, blowfish, twofish, idea, cast5

加解密,OpenSSL,OpenSSH

    enc工具:

    (加密)# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFILE

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

    (解密)# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE

加解密,OpenSSL,OpenSSH

單向加密:

    算法:md5, sha1

    工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum

    文法:# openssl dgst -CIPHER /PATH/TO/SOMEFILE...

加解密,OpenSSL,OpenSSH

    MAC: 消息認證碼,單向加密的一種延伸應用,用于實作在網絡通信中保證所傳輸的資料的完整性;

    機制:CBC-MAC;

          HMAC:使用md5或sha1算法 

    生成使用者密碼:

    # openssl passwd -1 -salt 8bits随機數

    生成随機數:

    # openssl rand -hex|-base64 NUM

加解密,OpenSSL,OpenSSH

公鑰加密:

工具:gpg, openssl rsautl

功能:

    數字簽名:RSA, DSA, ELGamal

        DSA: Digital Signature Algorithm

        DSS: Digital Signature Standard

    密鑰交換:公鑰加密、DH

生成密鑰對兒:

    操作過程:生成私鑰,從私鑰中提取公鑰;

    # openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS

注意:在bash指令行上放在小括号中執行的指令,其實是通過打開一個子shell程序進行的;

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

    從私鑰中手動提取公鑰:

    # openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout

加解密,OpenSSL,OpenSSH

    随機數生成器:

    random, urandom

    熵池:儲存硬體中斷産生的随機數

    /dev/random:僅從熵池中傳回随機數,當熵池中的随機數耗盡時,取随機數的程序将會被阻塞;

    /dev/urandom:先從熵池中取随機數,當熵池中的随機耗盡時,就通過僞随機數生成器生成随機數;

X.509 v3數字證書的格式:

    獲驗證書的方法:

    向RA注冊申請

    建立私有CA:

    OpenSSL

    OpenCA

使用OpenSSL建構私有CA:

    1、生成私鑰;

    2、生成自簽署證書;

    (1) 私鑰用于簽發證書時,向證書添加數字簽名使用;

    (2) 證書:每個通信方都導入此證書至“受信任的證書頒發機構”;

    配置檔案:/etc/pki/tls/openssl.cnf

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

建立私有CA:

    1、生成私鑰檔案: /etc/pki/CA/private/cakey.pem

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

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

2、生成自簽證書

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

        -new: 生成新的證書簽署請求;

        -key:私鑰檔案路徑,用于提取公鑰;

        -days N: 證書有效時長,機關為“天”;

        -out:輸出檔案儲存位置;

        -x509:直接輸出自簽署的證書檔案,通常隻有建構CA時才這麼用;

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

    3、提供輔助檔案

    # touch /etc/pki/CA/index.txt

    # echo 01 > /etc/pki/CA/serial

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

給節點發證書:

    1、節點申請證書

    在證書申請的主機上進行如下步驟:

    (1) 生成私鑰;

    (2) 生成證書簽署請求;

    (3) 把請求發送給CA;

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

注意:

(a) 其中的subject資訊部分,要與CA的保持一緻;

(b) Common Name要使用此主機在通信真實使用名字;

    2、CA簽發證書

    (1) 驗正請求者資訊

    (2) 簽署證書

    # openssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N

    (3) 把簽署好的證書發還給請求者

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

吊銷證書:

1、擷取吊銷證書的序列号;

# openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject

2、實作證書吊銷

(1) 吊銷證書

# openssl ca -revoke /PATH/FROM/CRT_FILE

(2) 生成吊銷證書的編号

echo 01 > /etc/pkie/CA/crlnumber

(3) 更新證書吊銷清單

# openssl crl -gencrl -out THISCA.crl

OpenSSH

ssh: secure shell (22/tcp) <-- telnet (23/tcp), rcp, rlogin

伺服器上安裝telnet

7.1

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

6.7telnet

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

    ssh protocol:v1, v2(目前)

兩種方式的使用者認證:基于密碼;基于密鑰

C/S

    Server: sshd

    Client:

        Linux: ssh

        Windows:

            xshell

            putty

            securecrt

            ...

OpenSSH:

    sshd: 伺服器

    ssh: 用戶端

    scp: 安全跨主機複制工具,基于ssh協定實作;

    sftp

    sshd: /etc/ssh/sshd_config

    ssh: /etc/ssh/ssh_config

    ssh指令行用戶端:

        ssh [options] [-l user] host ['COMMAND'] -p PORT

        ssh [options]  [user@]host ['COMMAND'] -p PORT

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

    基于密鑰認證:

    在用戶端生成一對密鑰,私自己留存;公鑰通過私密方式儲存至要登入的遠端服務某使用者的家目錄的專用于ssh通信的檔案;

# ssh-keygen [-t rsa]

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

示例1:

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

示例2:

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

scp遠端複制指令:

    push: scp [-rp] /path/from/somefile user@host:/path/to/somewhere  -P PORT

    pull: scp [-rp] user@host:/path/from/somefile /path/to/somewhere -P PORT

    -r:目錄

    -p:保持原來的權限

加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH
加解密,OpenSSL,OpenSSH

    sshd伺服器端的安全配置:

    /etc/ssh/sshd_config

        Port 22

        Protocol 2

    限制可登入使用者:

    PermitRootLogin : 是否允許管理者直接登入; no

    AllowUsers user1 user2 ...白名單

    AllowGroups grp1 grp2 ...白名單

    DenyUsers user1 ...黑名單

    DenyGroups grp1 ...黑名單

    僅監聽需要監聽的IP位址:

    ListenAddress 0.0.0.0

    網絡使用強密碼政策:随機數openssl

    認證出錯次數:MaxAuthTries 6(一般3)

    日志分析:/var/log/secure

繼續閱讀