Openssl相關的理論知識

 

一、OpenSSL的相關內容  

1、OpenSSL: SSL的開源實現 

  1. libcrypto: 通用加密解密的功能庫,提供了各種加密函數(crpty,decrypt)  

  2. libssl: TLS/SSL協議的實現,庫文件,能夠被其他文件所調用(TLS/SSL本身是實現基於會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫)  

  3. openssl: 多用途命令行工具(實現私有證書頒發機構)         

  4. openssl speed des   測試openssl加密des的速度  

  5.    eg:openssl enc -des3 -salt -a -in inittab out inittab.des3     被des3加密後的文件  

  6.    eg:openssl enc -des3 -salt -a -in inittab.des3 out inittab     被解密後的文件  

  7. md5sm inittab     計算inittab md5的校驗碼  

  8. sha1sum inittab   計算inittab sha1的校驗碼  

  9.    eg:openssl dgst -sha1 inittab  什麼樣的數據摘要算法對inittab做校驗碼  

  10.    eg:openssl passwd -l -salt tPsgh0st         salt存在的意義是避免反吞密碼  

  11.    eg:openssl rand -base64 12       base64加密以後的長度是12(rand:僞隨機數生成工具,  

  12. genrsa  :幫助生成一個rsa私鑰(公鑰是從私鑰中提取的)  

  13. openssl genrsa 後面可以帶上密鑰長度,若不指明則默認爲512  

  14.    eg: openssl genrsa 2048 > server.key    使用輸出重定向保存私鑰  

  15. openssl genrsa -out /PATH/TO/KEYFILENAME NUMBITS   明確保存在某文件中,不用使用數據重定向  

  16.    eg:(umask 077; openssl genrsa -out server1024.key 1024)   用括號括起來的命令只在當前子shell當中執行,執行完後子shell就退出了,創建文件都是600創建目錄都是700,密鑰長度是1024  

  17. openssl rsa -in /PATH/TO/KEYFILENAME -pubout  

  18.    eg:openssl rsa -in server.key -pubout       openssl生成rsa子命令  -in從哪裏讀取密鑰,-putout輸出公鑰  

  19.    eg:openssl rsa -in server1024.key -pubout  把公鑰從私鑰中提取出來  

二、Openssh的相關知識 

1、OpenSSH(開源)

  1. ssh 是一種協議,有兩個版本v1, v2 但v1目前處於廢棄狀態  

  2. 客戶端:  

  3.     Linux: ssh  

  4.     Windows: putty, SecureCRT()(很著名的遠程連接工具商業版), SSHSecureShellClient, Xmanager  

  5. 服務器端:  

  6.     sshd      

2、openssh (ssh, sshd)  

  1. ssh --> telnet 用來實現將認證過程加密 

  2. sshd: ssh服務器端需要一個主機密鑰  

  3. netstat  

  4.     -r:顯示路由表的  

  5.     -n:以數字方式顯示IP地址和端口號  

  6.     -t: tcp connections (tcp協議)  

  7.     -u: udp connections  (udp協議)  

  8.     -l: listening   顯示處於監聽狀態的服務  

  9.     -p: process   顯示哪一個程序監聽了當前狀態  

  10. ssh  客戶端的配置文件叫(ssh_config)  

  11. sshd 服務器端的配置文件叫(sshd_config)  

  12. ssh:  

  13.     ssh -l USERNAME REMOTE_HOST ['command']     指定用戶名和遠程主機  

  14.       eg:ssh -l root 172.16.66.1   

  15.     ssh USERNAME@REMOTE_HOST      

  16.       eg: ssl [email protected] 'ifconfig'    不用登錄遠程主機,只需執行遠程主機上的命令       

  17.     -p port  指定端口  

  18.     -X:登錄到遠程主機上,而且執行遠程主機上的窗口命令  

  19.     -Y:Y比X更安全  

三、如何保證數據的機密性?  

1、根據轉換規則將輸入的數據轉換成密文 

  1.    機密性:  

  2.      加密:plaintext(明文) --> 轉換規則 -->  ciphertext(密文) 

  3.      解密:ciphertext(密文) --> 轉換規則 --> plaintext(明文) 

  4.    轉換算法:密鑰(保證數據機密性的最核心的不是算法本身而是密鑰,我們要靠密鑰保證數據的安全性)     

  5.    對稱加密:算法(提供加密算法本身,並且要求用戶提供密鑰以後能夠結合密鑰和算法將明文轉換成密文,算法計算速度非常快,但其安全性幾乎完全依賴於密鑰,因爲很多算法是分開的)  

2、加密的方法  

1)對稱加密:  

  1.     DES:Data Encrption Standard(數據加密標準), 56bit  

  2.     3DES:實現3輪的DES,這是目前最常用的DES  

  3.     AES:Advanced(高級加密標準)可以使用變長密鑰(如:AES192, AES256, AES512)    

  4.     Blowfish  

2)單向加密 :(提取數的特徵碼,提取數據的數據的指紋,通過數據的指紋來完成數據的完整性)  

  1.     MD4  

  2.     MD5  (120)  

  3.     SHA1 (160)  

  4.     SHA192(192指輸出長度), SHA256, SHA384   

  5.     CRC-32 (不是一種加密算法,只是一種校驗碼應用機制,所以它不接受任何安全性)  

  6. 單向加密算法:提取數據特徵碼  

  7.     輸入一樣:輸出必然相同  

  8.     雪崩效應:輸入的微小改變,將會引起結果的巨大改變  

  9.     定長輸出:無論原始數據是多大,結果大小都是相同的  

  10.     不可逆:無法根據特徵碼還原原來的數據    

3)公鑰加密:(加密/簽名)  

  1.     身份認證(數字簽名)  

  2.     數據加密  

  3.     密鑰交換  

  4. 公鑰加密的算法:  

  5.     RSA: 既能實現加密又能實現簽名  

  6.     DSA:簽名,  

  7.     ElGamal:是一種商業加密算法  

  8. 公鑰加密本身可以實現兩種功能:身份驗證、加密數據,但也可以實現密鑰交換  

四、基於密鑰的認證:  

1、一臺主機爲客戶端(基於某個用戶實現):

1)生成一對密鑰  

  1. ssh-keygen   

  2.     -t {rsa|dsa}     指定算法  

  3.     -f /path/to/keyfile    表示密鑰文件  

  4.     -N 'password'    指定密碼  

2)將公鑰傳輸至服務器端某用戶的家目錄下的.ssh/authorized_keys文件中  

  1. 使用文件傳輸工具傳輸(ssh-copy-id, scp)  

  2. 用法:ssh-copy-id -i /path/to/pubkey USERNAME@REMOTE_HOST  

3)測試登錄  

  1. scp: 基於ssh的遠程複製命令,可以實現在主機之間傳輸數據 (傳輸過程中是加密的)  

  2. 用法:scp [options] SRC DEST  

  3. REMOTE_MACHINE  

  4.     USERNAME@HOSTNAME:/path/to/somefile  (遠程主機上的通常用這種格式)  

  5. eg:scp [email protected]:/etc/fstaab ./  把遠程的複製到本機上來  

2、基於密鑰認證的總結:

  1. 1)密碼應該經常換且足夠複雜;  

  2. 2)使用非默認端口;  

  3. 3)限制登錄客戶地址;  

  4. 4)禁止管理直接登錄;  

  5. 5)僅允許有限制用戶登錄;  

  6. 6)使用基於密鑰的認證;  

  7. 7)禁止使用版本1  

五、小實例PKI(A、B間的加密通信)

  1. 證書:(主機,用戶)  

  2.     用戶信息,公鑰  

  3.     頒發者的信息,簽名  

  4.     證書有效期限  

  5. A發送方:  

  6. 1)計算數據的特徵碼(單向加密);  

  7. 2)用自己的私鑰加密特徵碼,並附加在數據後面;  

  8. 3)生成一個臨時對稱密鑰;  

  9. 4)用此密鑰結合某算法加密數據及加密後的特徵碼;  

  10. 5)對接收方的公鑰加密此對稱密鑰,並附加加密後的數據後面;  

  11. 6)發送至接收方;  

  12. B接收方:  

  13. 1)用自己的私鑰解密加密的對稱密鑰;  

  14. 2)用對稱密鑰解密數據;  

  15. 3)用對方的公鑰解密加密的特徵碼;  

  16. 4)用同樣的算法計算數據的特徵碼,並與解密而來的特徵碼進行比較;  

六、OpenSSL實現私有CA的原理過程: 

1)創建CA  

  1.     自己生成一對密鑰;(把公鑰做成證書)  

  2.     生成自簽證書;   

2)客戶端  

  1.     生成一對密鑰;  

  2.     生成證書頒發請求, .csr;  

  3.     將請求發給CA;      

3)CA端  

  1.     簽署此證書;  

  2.     傳送給客戶端; 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章