Openssl——為你的信息保駕護航

OpenSSL基礎


·傳輸層協議:TCP,UDP,SCTP

        port:進程地址,進程向內核注冊使用某端口(獨占)

·同一主機上的進程間通信:IPC,message queue,shm,semerphor

·不同主機上的進程間通信:socket

         cip:port <– –> sip:port

                 cip:55637 <– –> sip:80        

                 監聽模式:LISTEN(ip:port)

·加密需要:

         不加密流量的易受攻擊性:

                 密碼/數據嗅探

                 數據操作

                 驗證操作

                 相當于郵寄明信片

         不安全的傳統協議:

                 telnet 、FTP 、POP3 等等;不安全密碼

                 http 、smtp 、NFS 等等;不安全信息

                 Ldap 、NIS 、rsh

·設計基本原則:

         使用成熟的安全系統

         以小人之心度輸入數據

         外部系統是不安全的

         最小授權

         減少外部接口

         缺省使用安全模式

         安全不是似是而非

         從STRIDE 思考

         在入口處檢查

·SSL:Secure Sockets Layer

        http –> ssl –> https

·安全的目標:

         保密性:confidentiality

         完整性:integrity

         可用性:availability

·攻擊類型:

         威脅保密性的攻擊:竊聽、通信量分析

         威脅完整性的攻擊:更改、偽裝、重放、否認

         威脅可用性的攻擊:拒絕服務(Dos)

·解決方案:

         技術(加密和解密)、服務(用于抵御攻擊的服務,為了上述安全目標而特地設計的安全服務)

        

         加密和解密:

                 傳統加密方法:替代加密方法、置換加密方法

                 現代加密方法:現代塊加密方法

        

         服務:

                 認證機制

                 訪問控制機制

        

         密鑰算法和協議:

                 對稱加密

                 公鑰加密

                 單項加密

                 認證協議

Linux系統:OpenSSL(ssl),GPG(pgp)


·OpenSSL由3部分組成:

         libcrypto庫:加密解密的庫

         libssl庫:加密模塊應用庫,實現ssl及tls

         openssl:多用途命令行工具

加密算法和協議:


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

         DES:Data Encryption Standard

         3DES:Triple DES

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

         Blowfish

         Twofish

         IDEA

         RC6

         CAST5

         特性:

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

                 2、將原始數據分割成為固定大小的塊、逐個進行加密

        

         缺陷:

                 1、密鑰過多

                 2、密鑰分發困難

                 3、數據來源無法確認

·公鑰加密:密鑰分為公鑰和私鑰

         公鑰:從私鑰中提取產生;可公開給所有人;public key

         私鑰:通過工具創建,使用者自己存留,必須保證其私密性;secret key

         特點:用公鑰加密的數據,只能使用與之配對的私鑰解密,反之亦然

        

         用途:

                 數字簽名:主要在于讓接收方確認發送方的身份

                 密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方

                 數據加密

        

         算法:RSA、DSA、ELGamal

                 DSS:Digital Signature Standard

                 DSA:Digital signature Algorithm

                 DSA:只能簽名不能加密

        

         缺點:密鑰長,加密解密效率低下

        

         實現加密:

                 接收者

                         生成公鑰/密鑰對:P和S

                         公開公鑰P,保密密鑰S

                 發送者

                         使用接收者的公鑰來加密消息M

                         將P(M)發送給接收者

                 接收者

                         使用密鑰S來解密:M=S(P(M))

        

         實現數字簽名:

                 發送者

                         生成公鑰/密鑰對:P和S

                         公開公鑰P,保密密鑰S

                         使用密鑰S來加密消息M

                         發送給接收者S(M)

                 接收者

                         使用發送者的公鑰來解密M=P(S(M))

        

         結合簽名和加密

·單向加密:即提出數據指紋(特征碼);只能加密,不能解密

         特征:定長輸出、雪崩效應

         功能:實現完整性

         算法:

                 md5:Message Digest 5 ,128bits

                 sha1:Secure Hash Algorithm 1 ,160bits

                 sha224 ,sha256 ,sha384 ,sha512

        

         工具

                 md5sum | sha1sum [ –check ] file

                 openssl 、gpg

                 rpm -V

    

         md5sum /path/to/file

                對文件進行哈希計算

                例如:

                        md5sum f1 > f1.md5

                        md5sum –check f1.md5

                                比較文件的hash值是否變化

·密鑰交換:IKE(Internet Key Exchange)

         公鑰加密

         DH(Deffie-Hellman)<迪菲-赫爾曼>

         ECDH(橢圓曲線DH)

         ECDHE(臨時橢圓曲線DH)

        

                 A:p,g   協商生成公開的整數a,素數p

                 B:p,g

                

                 A:產生一個隨機數x

                         通過DH算法發送給B一個數據

                                 –> p^x%g ==> B

                         密鑰:A:(p^y%g)^x=p^yx%g

                

                 B:產生一個隨機數y

                         通過DH算法發送給A一個數據

                                 –> p^y%g ==>A

                        密鑰:B:(p^x%g)^y=p^xy%g

        

         DH:

                 1、 A:a,p  協商生成公開的整數a,  大素數p

                     B:a,p

                 2、 A:生成隱私據數據:x(x<p),計算得出a^x%p,發送給B

                     B:生成隱私據數據:y(y<p), 計算得出a^y%p,發送給A

                 3、 A:計算得出(a^y%p)^x=a^xy%p,生成為密鑰

                     B:計算得出(a^x%p)^y=a^xy%p,生成為密鑰

·數據傳輸方式:

        加密通信中數據塊的結構:key<對稱加密>(data+SA[hash(data)])+PB(key)

                        用hash算法:計算出data的特征碼

                        用自己的SA<私鑰>:簽名data的特征碼

                        用對稱加密<key>加密:data和簽名后的hash(data)

                        用對方的PB<公鑰>加密:對稱加密的密鑰<key>

                        把對稱加密的數據和PB加密的數據一同發給對方

·PKI:Public Key Infrastructure

         公鑰基礎設施:

         簽證機構:CA

         注冊機構:RA

         證書吊銷列表:CRL

         證書存取庫:

        

         X.509v3:定義了證書的結構以及認證協議標準

                 版本號

                 序列號

                 簽名算法ID

                 發行者名稱

                 有效期限

                 主體名稱

                 主體公鑰

                 發行者的唯一標識

                 主體的唯一標識

                 擴展

                 發行者的簽名

        

         證書獲?。?/span>

                 證書類型:

                         證書授權機構的證書

                         服務器

                         用戶證書

                 獲取證書兩種方法:

                         使用證書授權機構

                                 生成簽名請求(csr)

                                 將csr發送給CA

                                 從CA處接收簽名

                         自簽名的證書

                                 自已簽發自己

·SSL:Secure Sockets Layer

         Netscape:1994

         V1.0(沒有面世),V2.0,V3.0

·TLS:Transport Layer Security

         IETF:1999

         V1.0,V1.1,V1.2,V1.3

         分層設計:

                 1、最底層:基礎算法原語的實現:aes、rsa、md5

                 2、向上一層:各種算法的實現

                 3、再向上一層:組合算法實現的半成品

                 4、最上層:用各種組件拼裝而成的各種成品密碼學協議軟件

        

         協議的開源實現:OpenSSL

SSL/TLS


·SSL:安全套接字層(ssl 1.0,2.0,3.0)

·TLS:傳輸層安全(tls 1.0,1.1,1.2,1.3)

·OpenSSL

         libcrypto

         libssl

         openssl

·SSL回話主要三步:

         客戶端向服務器端索要并驗證證書

         雙方協商生成“會話密鑰”

         雙方采用“會話密鑰”進行加密通信

·SSL Handshake Protocol

         第一階段:ClientHello

                 支持的協議版本:比如tls 1.2

                 客戶端生成一個隨機數,稍后用于生成“會話密鑰”

                 支持的加密算法:比如AES、RSA

                 支持的壓縮算法

        

         第二階段:ServerHello

                 確認使用的加密通信協議版本:比如tls 1.2

                 服務器端生成一個隨機數,稍后用于生成“會話密鑰”

                 確認使用的加密方法

                 服務器證書

        

         第三階段:

                 驗證服務器證書,在確認無誤后取出其公鑰(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)

                 發送以下信息給服務器端

                 一個隨機數

                 編碼變更通知,表示隨后額信息都將用雙方商定的加密方法和密鑰發送

                 客戶端握手結束通知

        

         第四階段:

                 收到客戶端發來的第三個隨機數<客戶端在第三階段產生的隨機數>per-master-key后,計算生成本次會話所用到的“會話密鑰”

                 向客戶端發送如下信息:

                 編碼變更通知,表示隨后額信息都將用雙方商定的加密方法和密鑰發送

                 服務器端握手結束通知

·PKI:公鑰基礎設施

         簽證機構:CA

         注冊機構:RA

         證書吊銷列表:CRL

         證書存取庫

OpenSSL命令


·組件:

         libcrypto,libssl主要由開發者使用

         openssl:多用途命令行工具

·openssl:

         眾多子命令,可分為三類:

                 標準命令

                 消息摘要命令(dgst子命令)

                 加密命令(enc子命令)

        

         標準命令:enc ,ca ,req ,genrsa,…..

        

         openssl ?

                 查看openssl命令的眾多子命令

·對稱加密:

         工具: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 -in fstab.ciphertext -out fstab.test

                         -e:加密

                         -d:解密

                         -a:[-a/-base64]使用base64位的輸出格式

                         -salt:加點鹽ftp://10.1.0.1/pub/exam/%E9%9D%A2%E8%AF%95%E9%A2%98/%E6%90%9C%E7%8B%90/QQ%E5%9B%BE%E7%89%8720141202142644.jpg

                         -in:對那個文件進行加密/解密

                         -out:加密/解密輸出的文件路徑及文件名

Openssl——為你的信息保駕護航

Openssl——為你的信息保駕護航


·單向加密:

         工具:openssl dgst ,md5sum ,sha1sum ,sha224sum ……

        

         dgst命令:

                 # openssl dgst -md5 /PATH/TO/SOMEFILE

3.png

·生成用戶密碼:

         工具:passwd ,openssl passwd

        

         openssl passwd -1 -salt SALT

                 -1:使用sha1的密鑰長度生成密碼

                 默認只支持sha1,不支持sha256以及sha512

4.png

·生成隨機數:

         工具:openssl rand

        

         # openssl rand -hex NUM

                 hex encode output

                 生成16位進制的隨機數,1位占4字節

         # openssl rand -base64 NUM

                 base64 encode output

                 生成的隨機數要去掉最后面的2個=符號

5.png

·公鑰加密:

         加密解密:

                 算法:RSA ,ELGamal

                 工具:openssl rsautl ,gpg

        

        數字簽名:

                 算法:RSA ,DSA ,ELGamal

                 工具:openssl rsautl ,gpg

        

        密鑰交換:

                 算法:DH

        

        生成密鑰:

                 生成私鑰:# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)

                         可以加 -des3 使用3des對私鑰進行加密

                 提出公鑰:# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout

Openssl——為你的信息保駕護航

Openssl——為你的信息保駕護航

Openssl——為你的信息保駕護航

Linux系統上的隨機數生成器:


/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞

/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞

    偽隨機數不安全

         熵池中隨機數的來源:

                 硬盤IO中斷時間間隔

                 鍵盤IO中斷時間間隔

        

         隨機數不夠用時:

                 1、擊鍵<不建議>

                 2、cp或mv一個大的文件,從而產生大量硬盤IO終端<建議>

CA:


·公共信任的CA,私有CA

·建立私有CA:

         openssl

         OpenCA

·openssl命令:

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

        

[ CA_default ]
                
dir             = /etc/pki/CA           # Where everything is kept   //CA目錄
certs           = $dir/certs            # Where the issued certs are kept   //CA簽名的證書所放路徑
crl_dir         = $dir/crl              # Where the issued crl are kept  //吊銷列表
database        = $dir/index.txt        # database index file.  <必須touch出文件來>   //已簽名證書的數據庫文件
                
new_certs_dir   = $dir/newcerts         # default place for new certs.  //新證書存放路徑
                
certificate     = $dir/cacert.pem       # The CA certificate     //CA自己的證書路徑及文件名
serial          = $dir/serial           # The current serial number   <必須touch出文件來>  //每個證書的序列號及文件名
crlnumber       = $dir/crlnumber        # the current crl number   //吊銷證書的序列號及文件名
                                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key <很重要>    //CA自己的私鑰路徑及文件名
                
default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = sha256                # use SHA-256 by default
preserve        = no                    # keep passed DN ordering
                
# For the CA policy
[ policy_match ]
countryName             = match   //match必須同CA服務器
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional   //optional可以選的
commonName              = supplied  //supplied自己給出
emailAddress            = optional

·構建私有CA:

         在確定配置為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}

                                 一般默認有上面三個目錄

                         # touch /etc/pki/CA/{serial,index,txt}

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

·要用到證書進行安全通信的服務器,需要向CA請求簽署證書

         步驟:(以http為例)

                 (1)用到證書的主機生成私鑰

                         # mkdir /etc/httpd/ssl

                         # cd /etc/httpd/sl

                         # (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

                

                 (3)將請求通過可靠方式發送給CA主機

                         # scp /etc/httpd/ssl/httpd.csr root@IP.A.DD.R:/tmp/

                

                 (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

                                         -subject :給誰發布的

                

                

                 (5)把CA主機上簽署的證書發給http主機

·吊銷證書:

         步驟:

                 (1)客戶端獲取要吊銷的證書的serial(在使用證書的主機上執行)

                         # openssl x509 -in /etc/pki/CA/certs/httpd.crt -nount -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

                                 thisca.crl  是CA簽署的其他公鑰的簽名

                

                         查看crl文件

                                 # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

作業:用openssl實現證書申請

創建CA

(1)生成私鑰

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

Openssl——為你的信息保駕護航

Openssl——為你的信息保駕護航

(2)生成自簽證書

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

Openssl——為你的信息保駕護航

(3)為CA提供所需的目錄及文件

# ls -ld /etc/pki/CA/{certs.crl,newcerts}

        一般默認有上面三個目錄,無這3個目錄時,創建之

# touch /etc/pki/CA/{serial,index,txt}

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

Openssl——為你的信息保駕護航

要用到證書進行安全通信的服務器,需要向CA請求簽署證書

步驟:(以http為例)

(1)用到證書的主機生成私鑰

# mkdir /etc/httpd/ssl

# cd /etc/httpd/sl

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

Openssl——為你的信息保駕護航

Openssl——為你的信息保駕護航

(2)生成證書簽署請求<提取出私鑰中的公鑰>

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

Openssl——為你的信息保駕護航

(3)將請求通過可靠方式發送給CA主機

# scp /etc/httpd/ssl/httpd.csr root@IP.A.DD.R:/tmp/

Openssl——為你的信息保駕護航

(4)在CA主機上簽署證書

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

Openssl——為你的信息保駕護航

(5)把CA主機上簽署的證書發給http主機

Openssl——為你的信息保駕護航


原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/48461

(0)
megedugaomegedugao
上一篇 2016-09-22 10:04
下一篇 2016-09-22 16:12

相關推薦

  • 企業面試題

    要求: 將一下數據進行排序(字母部分已小到大排序) 101.37.8.249 wz417-419/wz119-125/wz7-16/wz571/wz544/wz1-6101.37.21.19 wz545/wz453-456/wz441-444116.62.4.21 wz106-118/wz514-516/wz581/wz190-199/wz572101.37…

    Linux干貨 2017-06-27
  • 交換分區管理

    創建交換分區 linux上的交換分區必須使用獨立的文件系統且文件系統的systemid必須為82mkswap [options] device [size] 創建交換分區文件系統 掛載交換分區     swapon 設備名稱 處理交換文件和分區     交換分區是系統RAM的補充  &nb…

    Linux干貨 2016-09-02
  • RAID級別及各個級別特性

    1、什么RAID      RAID是“Redundant Array of Independent Disk”的縮寫,中文意思是獨立冗余磁盤陣列。 2、RAID的級別及各個級別的特性:     (1)RAID-0:無差錯控制的條帶化:   &nbs…

    Linux干貨 2016-04-12
  • 馬哥教育網絡班22期+第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。      文件管理命令有:mkdir  rm  tree  ls  等等  1、mkdir [options] /path/to/somewhere      &…

    Linux干貨 2016-08-22
  • shell編程——讓你又愛又恨的東西

    變量類型:      不同的數據類型在系統中所占資源不同,并且表示的范圍也不同      數值型:          短整型short:      &…

    Linux干貨 2016-08-12
  • grep與文本處理工具

    grep:基本正則表達式,-E  -F egrep:擴展正則表達式,-G -F fgrep: 不支持正則表達式,-F  egrep:          支持擴展的正則表達式實現類似于grep文本過濾功能; grep -E          …

    Linux干貨 2016-12-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 12:51

    我們常常處于測試的目的會自建CA來模擬https協議的實現,以后學習中也會用的很多,望熟練掌握,嘗試著用腳本來實現CA主機的自簽和授權,挑戰一下自己

欧美性久久久久