http://sweetpotato.blog.51cto.com/533893/1662061 http://www.cnblogs.com/jasperhsu/p/5107533.html http://www.178linux.com/77188
>安全的目標: 保密性:confidentiality 確保通訊信息不被任何無關的人看到 完整性:integrity 實現通訊雙方的報文不會產生信息丟失 數據完整性 系統完整性 可用性:availability 通訊任何一方產生的信息應當對受權實體可用 >攻擊類型: 威脅保密性的攻擊:竊聽、通訊量分析 威脅完整性的攻擊:更改、假裝、重放、否定 重放:攻擊者能截獲雙方通訊的報文,並開始一遍遍發送 否定:通訊的雙方的某一方發送的,下訂單說沒下 威脅可用性的攻擊:拒絕服務(DoS) >解決方案 技術(加密和解密) 加密和解密: 傳統加密方法:替代加密方法、置換加密方法 現代加密方法:現代塊加密方法 現代塊加密:把發送的整個數據切割固定成塊,每塊單獨加密,先後兩個塊創建關聯關係 服務(用於抵禦攻擊的服務,也便是爲了上述安全目標而特意設計的安全服務) >服務: 認證機制 訪問控制機制 密鑰算法和協議 對稱加密 公鑰加密 單向加密 認證協議 加密數據依賴與算法和密鑰,安全性依賴於密鑰。由於算法是公開的人人均可以獲得,可是密鑰只有通訊的主機纔有 >Linux系統上述功能解決方案: OpenSSL(ssl):OpenSSL是ssl協議和加密庫的實現 GPG(pgp):GPG是gpg協議的實現
對稱加密(私鑰加密):加密和解密使用同一個密鑰 DES:Data Encryption Standard(數據加密標準) IBM實驗室研發;加密端64位明文產生64爲密文,解密端64位密文還原64位明文,8個字節爲一塊,加密和解密使用56位密鑰,DES使用16個迭代塊實現,是現代加密算法 3DES: Triple DES(三重數據加密標準) DES的加強版,比DES多3個數量級 AES: Advanced Data Encryption Standard(高級數據加密標準);(128bits, 192bits, 256bits, 384bits) AES算法欲取待3DES算法,支持128,192和256位密鑰長度,有效的密鑰長度可達上千位。AES算法採用了更爲高效的編寫方法,對CPU的佔用率較少,目前普遍使用。 特性: 1.加密、解密使用同一個密鑰,效率高 2.將原始數據分割成固定大小的塊,逐個進行加密 缺陷: 1.密鑰過多 2.密鑰分發困難 3.數據來源沒法確認
公鑰加密:密鑰是成對出現 公鑰(public key):從私鑰中提取產生,公開給全部人 私鑰(secret key):經過工具建立,本身留存,必須保證其私密性 特色: 用公鑰加密的數據,只有私鑰能解密,其保密性能到了保障;性能較差,用私鑰加密的數據,只能用公鑰解密,任何人都何以得到公鑰,能夠確認發送方身份(身份認證) 功能: 數字簽名:主要在於讓接收方確認發送方身份,完成身份驗證 對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰後發送給對方 數據加密:適合加密較小數據 缺點: 密鑰長,加密解密效率低下 算法: RSA:只能實現簽名,加密和解密 DSA:只能加密,只能作數字簽名 ELGamal:商業算法 就算法自己的實現來說,公鑰加密技術比對稱加密技術的速度慢上差很少3個數量級,一個數量級就是10倍,因此3個數量級不是30倍,而是1000倍。所以,在加密數據時是不多用到公鑰去加密的。 非對稱加密: 基於一對公鑰/密鑰對 用密鑰對中的一個加密,另外一個解密 實現加密: 接收者 生成公鑰/密鑰對: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安全散列算法):160bits,sha224,sha256,sha384,sha512 功能:確保數據完整性 如在一個網站下載軟件,爲了驗證軟件在下載過程當中沒有被第三方修改,網站會提供一個MD5和軟件的特徵碼,只要把MD5碼下載下來和咱們下載的軟件進行運算就能夠獲得軟件的特徵碼,只要這個特徵碼和網站提供的同樣,說明軟件沒有被修改,若是不同,百分之百是被修改了。
密鑰交換:IKE(Internet Key Exchange) 公鑰加密:經過非對稱加密算法,加密對稱加密算法的密鑰,在用對稱加密算法實際要傳輸的數據 DH (Deffie-Hellman) :生成會話密鑰 前提發送方和接受方協商使用同一個大素數p和生成數g,各自產生的隨機數X和Y。發送方將g的X次方mod P產生的數值發送給接收方,接受方將g的Y次方mod P產生的數值發送給發送方,發送方再對接收的結果作X次方運算,接受方對接收的結果作Y次方運算,最終密碼造成,密鑰交換完成。 DH: A: p,g B: p,g A: 生成隱私數據 ? (x<p)計算得出 p^x%g ,發送給B B: 生成隱私數據 :y, 計算得出 p^y%g,發送給A A:計算得出 [(p^y%g)^x] %p = p^xy%g,生成爲密鑰 B:計算得出 [(p^x%g)^y] %p = p^xy%g,生成爲密鑰
SSL: Secure Socket Layer 功能:機密性,認證,完整性,重放保護 兩階段協議,分爲握手階段和應用階段 握手階段(協商階段): 客戶端和服務器端認證對方身份(依賴於PKI體系,利用數字證書進行身份認證),並協商通訊中使用的安全參數、密碼套件以及主密鑰。 後續通訊使用的全部密鑰都是經過MasterSecret 生成。 應用階段:在握手階段完成後進入,在應用階段通訊雙方使用握手階段協商好的密鑰進行安全通訊。 分層設計: 一、最底層:基礎算法原語的實現,aes, rsa, md5 二、向上一層:各類算法的實現 三、再向上一層:組合算法實現的半成品 四、用各類組件拼裝而成的各類成品密碼學協議軟件
SSL:Secure sockets Layer 版本:V1.0, V2.0, V3.0 TLS:transport layer Security 版本:V1.0, V1.1, V1.2, V1.3 SSL(Secure Sockets Layer,安全套接層),及其繼任者TLS(Transport Layer Security,傳輸層安全)是爲網絡通訊提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡鏈接進行加密。 Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換 ChangeCipherSpec協議:一條消息代表握手協議已經完成Alert協議:對握手協議中一些異常的錯誤提醒,分爲fatal和warning 兩個級別,fatal 類型錯誤會直接中斷SSL 連接,而warning級別的錯誤SSL連接仍可繼續,只是會給出錯誤警告 Record協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等 HTTPS協議:就是「HTTP 協議」和「SSL/TLS 協議」的組合。HTTP over SSL」 或「HTTP over TLS」,對http 協議的文本數據進行加密處理後,成爲二進制形式傳輸
OpenSSL由三部分組成:libencrypto庫,libssl庫,openssl多用途命令行工具。 OpenSSL是網絡通訊提供安全及數據完整性的一種安全協議,囊括了主要的密碼算法、經常使用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。 OpenSSL是一個強大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,它仍是一個多用途的、跨平臺的密碼工具。 SSL是Secure Sockets Layer(安全套接層協議)的縮寫,能夠在Internet上提供祕密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通訊的保密性和可靠性,可在服務器端和用戶端同時實現支持。已成爲Internet上保密通信的工業標準。安全套接層協議能使用戶/服務器應用之間的通訊不被攻擊者竊聽,而且始終對服務器進行認證,還可選擇對用戶進行認證。 SSL協議要求創建在可靠的傳輸層協議(TCP)之上。SSL協議的優點在於它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地創建於SSL協議之上。 SSL協議在應用層協議通訊以前就已經完成加密算法、通訊密鑰的協商及服務器認證工做。在此以後應用層協議所傳送的數據都會被加密,從而保證通訊的私密性。 經過以上敘述,SSL協議提供的安全信道有如下三個特性: 一、數據的保密性信息加密就是把明碼的輸入文件用加密算法轉換成加密的文件以實現數據的保密。加密的過程須要用到密鑰來加密數據而後再解密。沒有了密鑰,就沒法解開加密的數據。數據加密以後,只有密鑰要用一個安全的方法傳送。加密過的數據能夠公開地傳送。 二、數據的完整性加密也能保證數據的一致性。例如:消息驗證碼(MAC),可以校驗用戶提供的加密信息,接收者能夠用MAC來校驗加密數據,保證數據在傳輸過程當中沒有被篡改過。 三、安全驗證加密的另一個用途是用來做爲我的的標識,用戶的密鑰能夠做爲他的安全驗證的標識。SSL是利用公開密鑰的加密技術(RSA)來做爲用戶端與服務器端在傳送機密資料時的加密通信協定。 基本功能: OpenSSL整個軟件包大概能夠分紅三個主要的功能部分:密碼算法庫、SSL協議庫以及應用程序。OpenSSL的目錄結構天然也是圍繞這三個功能部分進行規劃的。 做爲一個基於密碼學的安全開發包,OpenSSL提供的功能至關強大和全面,囊括了主要的密碼算法、經常使用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。 OpenSSL的應用程序已經成爲了OpenSSL重要的一個組成部分。如OpenCA,就是徹底使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基於OpenSSL的密碼算法庫和SSL協議庫寫成的。 OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試以及其它輔助配置功能。 輔助功能: BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎全部類型的IO接口,如內存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提升,OpenSSL提供API的複雜性也下降了不少。 OpenSSL對於隨機數的生成和管理也提供了一整套的解決方法和支持API函數。隨機數的好壞是決定一個密鑰是否安全的重要前提。 OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書籤發和管理中的配置文件機制等等。 特色: OpenSSL採用C語言做爲開發語言,這使得OpenSSL具備優秀的跨平臺性能,這對於廣大技術人員來講是一件很是美妙的事情,能夠在不一樣的平臺使用一樣熟悉的東西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平臺,這使得OpenSSL具備普遍的適用性。 (1)在通訊以前,服務器端經過加密算法生成一對密鑰,並把其公鑰發給CA申請數字證書。 (2)CA審覈後,結合服務端發來的相關信息生成數字證書,並把該數字證書發回給服務器端。 (3)客戶端和服務器端經tcp三次握手,創建初步鏈接。 (4)客戶端發送http報文請求並協商使用哪一種加密算法。 (5)服務端響應報文並把自身的數字簽名發給服務端。 (6)客服端下載CA的公鑰,驗證其數字證書的擁有者是不是服務器端(這個過程能夠獲得服務器端的公鑰)。(通常是客戶端驗證服務端的身份,服務端不用驗證客戶端的身份。) (7)若是驗證經過,客戶端生成一個隨機對稱密鑰,用該密鑰加密要發送的URL連接申請,再用服務器端的公鑰加密該密鑰. (8)把加密的密鑰和加密的URL連接一塊兒發送到服務器。 (9)服務器端使用自身的私鑰解密,得到一個對稱密鑰,再用該對稱密鑰解密經加密的URL連接,得到URL連接申請。 (10)服務器端根據得到的URL連接取得該連接的網頁,並用客戶端發來的對稱密鑰把該網頁加密後發給客戶端。 (11)客戶端收到加密的網頁,用自身的對稱密鑰解密,就能得到網頁的內容了。 (12)TCP四次揮手,通訊結束。
以上可歸納爲: 客戶端向服務器端索要並驗證證書 雙方協商生成「會話祕鑰」 雙方採用「會話祕鑰」並進行加密通訊 第一階段: 支持的協議版本,如tls1.2 客戶端生成一個隨機數,稍後用戶會生成「會話密匙」 支持的加密算法,如AES 3DES RSA 支持的壓縮算法 第二階段: 確認使用的加密通訊協議版本,如tls1.2 服務器端生成一個隨機數,稍後用於生成「會話密匙」 確認使用的加密算法 服務器證書 第三階段: 驗證服務器證書,在確認無誤後取其公鑰(發證機構 證書完整性 證書持有者 證書有效期 吊銷列表) 發送如下信息給服務器端 一個隨機數 編碼變動通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送 客戶端握手結束通知 第四階段: 收到客戶端發來的第三個隨機數後,計算生成本次會話全部的「會話密匙」 向客戶端發送以下信息 編碼變動通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送 服務端握手結束通知
三個組件: openssl:多用途的命令行工具,包openssl libcrypto:加密算法庫,包openssl-libs libssl:加密模塊應用庫,實現了ssl及tls,包nss openssl 命令: 兩種運行模式:交互模式和批處理模式 openssl version :程序版本號 標準命令、消息摘要命令、加密命令 標準命令:enc, ca, req, … 對稱加密: 工具:openssl enc, gpg 算法:3des, aes, blowfish, twofish
加密:openssl enc -e -des3 -a -salt -in testfile -out testfile.cipherhtml
-out the output filename, standard output by default. (默認輸出文件名)linux
解密:openssl enc -d -des3 -a -salt -in testfile.cipher -out testfilegit
工具:md5sum, sha1sum, sha224sum,sha256sum… openssl dgst dgst命令: openssl dgst -md5 [-hex 默認] /PATH/SOMEFILE openssl dgst -md5 testfile md5sum /PATH/TO/SOMEFILE
openssl passwd -1 -salt SALT(最多8 位) openssl passwd -1 -salt centos
openssl rand -base64 | -hex NUM NUM: 表示字節數;-hex 時,每一個字符爲十六進制,至關於4位二進制,出現的字符數爲NUM*2 -base64 Perform base64 encoding on the output. (進行base64編碼輸出) -hex Show the output as a hex string. (將輸出顯示爲十六進制字符串)
算法:RSA, ELGamal 工具:gpg, openssl rsautl(man rsautl) 數字簽名: 算法:RSA, DSA, ELGamal 密鑰交換: 算法:dh DSA: Digital Signature Algorithm (數字信號運算法則) DSS:Digital Signature Standard (數字簽名標準) RSA:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS(umask 077; openssl genrsa -out test.key -des 2048)web
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE算法
Openssl rsa -in test.key -pubout -out test.key.pub數據庫
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞vim
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成僞隨機數,非阻塞centos
PKI: Public Key Infrastructure(公鑰基礎設施)瀏覽器
是一種遵循既定標準的祕鑰管理平臺,它可以爲全部網絡應用提供加密和數字簽名等密碼服務及所必須的密鑰和證書管理體系,PKI就是利用公鑰理論和技術創建的提供安全服務的基礎設施。PKI技術是信息安全技術的核心,也是電子商務的關鍵和基礎技術。 完整的PKI系統必須具備權威認證機構(CA)、數字證書庫、密鑰備份及恢復系統、證書做廢系統、應用接口(API)等基本構成部分,構建PKI也將圍繞着這五大系統來着手構建。 PKI的基礎技術包括加密,數字簽名,數據完整機制,數字信封,雙重數字簽名等。 簽證機構:CA (Certification Authority) 用戶在註冊機構註冊證書,CA就會簽發用戶的公鑰認證,而且和申請者的信息綁定在一塊兒而且簽名後,以證書形式發給申請者,而後在本地的證書存取庫備份。 註冊機構:RA (Registration Authority) 通常用戶都是在這裏註冊證書。 證書吊銷列表:CRL (Certificate Revocation List) 若是用戶私鑰丟失,必需要申請吊銷證書,不然可能會被別人冒名頂替。 證書存取庫: 全部發出的證書都會在這裏存一份,若是丟失證書能夠在這裏獲得,若是丟失私鑰那麼只能申請證書撤銷。
版本號:標識證書的版本 序列號:標識證書的惟一證書,相似於身份證 簽名算法ID:證書的算法標識 發行者名稱:證書頒發這的可識別名 有效期限:證書有效的時間段 主體名稱:證書擁有着的可識別名 主體公鑰:關鍵部分 發行者的惟一標識:證書頒發者的惟一標識符 主體的惟一標識:證書擁有者的惟一標識符 擴展信息 發行者的簽名:證書頒發者對證書的簽名,上述整個內容作單向加密,獲得的特徵碼用本身私鑰加密,並附加到後面,用來生產發行者的簽名
證書類型: 證書受權機構的證書 服務器 用戶證書 獲取證書兩種方法: 使用證書受權機構 生成簽名請求(csr) 將csr 發送給CA 從CA 處接收簽名 自簽名的證書 自已簽發本身的公鑰
在肯定配置爲CA的服務上生成一個自簽證書,併爲CA提供所須要的目錄及文件便可安全
三種策略:
匹配:申請填寫的信息必須和CA設置信息一致
支持:必須填寫這項申請信息
可選:可寫可不寫
自簽證書,生成私鑰
生成自簽名證書
-new:生成新證書籤署請求 -x509:生成自籤格式證書,專用於建立私有CA時 -key:生成請求時用到的私有文件路徑 -out:生成的請求文件路徑;若是自籤操做將直接生成簽署過的證書 -days:證書的有效時長,單位是天 (不寫默認爲365天)
[root@www ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN #國家 State or Province Name (full name) []:HeNan #省份 Locality Name (eg, city) [Default City]:ZZ #城市 Organization Name (eg, company) [Default Company Ltd]:dalong.com #公司 Organizational Unit Name (eg, section) []:Ops #部門 Common Name (eg, your name or your server's hostname) []:CA.dalong.com #我的或主機名 Email Address []: #郵箱地址 [root@www ~]# ll /etc/pki/CA/cacert.pem #生成的自簽證書 -rw-r--r--. 1 root root 964 Jul 16 17:57 /etc/pki/CA/cacert.pem
爲CA提供所需的文件
[root@localhost /etc/pki/CA]#touch index.txt 生成證書索引數據庫文件 [root@localhost /etc/pki/CA]#echo 01 > /etc/pki/CA/serial 制定第一個頒發證書的序列號
要用到證書進行安全通訊的服務器,須要向CA請求籤署證書
(以httpd爲例) [root@localhost /etc/pki/CA]#yum install httpd -y [root@localhost ~]#vim /var/www/html/index.html Test Page [root@localhost ~]#systemctl start httpd.service [root@localhost ~]#ss -tnl LISTEN 0 128 :::80 :::* [root@localhost ~]#mkdir /web/ssl -pv (用來保存證書和私鑰)
[root@localhost /web/ssl]#(umask 0077;openssl genrsa -out httpd_ key.pem) Generating RSA private key, 1024 bit long modulus ..........................++++++ ......................++++++ e is 65537 (0x10001)
[root@localhost /web/ssl]#openssl req -new -key httpd_key.pem -out httpd.csr Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:BeiJing Locality Name (eg, city) [Default City]:BeiJing Organization Name (eg, company) [Default Company Ltd]:Tencent Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:www.tencent.com Email Address []:www.admin@Rookie.com 注意:默認國家,省,公司名稱三項必須和CA一致 Please enter the following 'extra' attributes 可輸入如下額外屬性(可省略) to be sent with your certificate request A challenge password []: An optional company name []:
[root@localhost /web/ssl]#openssl ca -in httpd.csr -out httpd.crt Certificate is to be certified until May 29 14:04:18 2018 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
[root@localhost ~]#yum -y install mod_ssl [root@localhost ~]#vim /etc/httpd/conf.d/ssl.conf
客戶端獲取要吊銷的證書的serial(在使用證書的主機執行)
[root@localhost ~]#openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
CA主機吊銷證書
先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致
吊銷
[root@localhost ~]#openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem其中的SERIAL要換成證書真正的序列號;
生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
[root@localhost ~]#echo 01 > /etc/pki/CA/crlnumber
更新證書吊銷列表[root@localhost ~]## openssl ca -gencrl -out thisca.crl