一、OpenSSL的相關內容
1、OpenSSL: SSL的開源實現
libcrypto: 通用加密解密的功能庫,提供了各種加密函數(crpty,decrypt)
libssl: TLS/SSL協議的實現,庫文件,能夠被其他文件所調用(TLS/SSL本身是實現基於會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫)
openssl: 多用途命令行工具(實現私有證書頒發機構)
openssl speed des 測試openssl加密des的速度
eg:openssl enc -des3 -salt -a -in inittab out inittab.des3 被des3加密後的文件
eg:openssl enc -des3 -salt -a -in inittab.des3 out inittab 被解密後的文件
md5sm inittab 計算inittab md5的校驗碼
sha1sum inittab 計算inittab sha1的校驗碼
eg:openssl dgst -sha1 inittab 什麼樣的數據摘要算法對inittab做校驗碼
eg:openssl passwd -l -salt tPsgh0st salt存在的意義是避免反吞密碼
eg:openssl rand -base64 12 base64加密以後的長度是12(rand:僞隨機數生成工具,
genrsa :幫助生成一個rsa私鑰(公鑰是從私鑰中提取的)
openssl genrsa 後面可以帶上密鑰長度,若不指明則默認爲512
eg: openssl genrsa 2048 > server.key 使用輸出重定向保存私鑰
openssl genrsa -out /PATH/TO/KEYFILENAME NUMBITS 明確保存在某文件中,不用使用數據重定向
eg:(umask 077; openssl genrsa -out server1024.key 1024) 用括號括起來的命令只在當前子shell當中執行,執行完後子shell就退出了,創建文件都是600創建目錄都是700,密鑰長度是1024
openssl rsa -in /PATH/TO/KEYFILENAME -pubout
eg:openssl rsa -in server.key -pubout openssl生成rsa子命令 -in從哪裏讀取密鑰,-putout輸出公鑰
eg:openssl rsa -in server1024.key -pubout 把公鑰從私鑰中提取出來
二、Openssh的相關知識
1、OpenSSH(開源)
ssh 是一種協議,有兩個版本v1, v2 但v1目前處於廢棄狀態
客戶端:
Linux: ssh
Windows: putty, SecureCRT()(很著名的遠程連接工具商業版), SSHSecureShellClient, Xmanager
服務器端:
sshd
2、openssh (ssh, sshd)
ssh --> telnet 用來實現將認證過程加密
sshd: ssh服務器端需要一個主機密鑰
netstat
-r:顯示路由表的
-n:以數字方式顯示IP地址和端口號
-t: tcp connections (tcp協議)
-u: udp connections (udp協議)
-l: listening 顯示處於監聽狀態的服務
-p: process 顯示哪一個程序監聽了當前狀態
ssh 客戶端的配置文件叫(ssh_config)
sshd 服務器端的配置文件叫(sshd_config)
ssh:
ssh -l USERNAME REMOTE_HOST ['command'] 指定用戶名和遠程主機
eg:ssh -l root 172.16.66.1
ssh USERNAME@REMOTE_HOST
eg: ssl [email protected] 'ifconfig' 不用登錄遠程主機,只需執行遠程主機上的命令
-p port 指定端口
-X:登錄到遠程主機上,而且執行遠程主機上的窗口命令
-Y:Y比X更安全
三、如何保證數據的機密性?
1、根據轉換規則將輸入的數據轉換成密文
機密性:
加密:plaintext(明文) --> 轉換規則 --> ciphertext(密文)
解密:ciphertext(密文) --> 轉換規則 --> plaintext(明文)
轉換算法:密鑰(保證數據機密性的最核心的不是算法本身而是密鑰,我們要靠密鑰保證數據的安全性)
對稱加密:算法(提供加密算法本身,並且要求用戶提供密鑰以後能夠結合密鑰和算法將明文轉換成密文,算法計算速度非常快,但其安全性幾乎完全依賴於密鑰,因爲很多算法是分開的)
2、加密的方法
1)對稱加密:
DES:Data Encrption Standard(數據加密標準), 56bit
3DES:實現3輪的DES,這是目前最常用的DES
AES:Advanced(高級加密標準)可以使用變長密鑰(如:AES192, AES256, AES512)
Blowfish
2)單向加密 :(提取數的特徵碼,提取數據的數據的指紋,通過數據的指紋來完成數據的完整性)
MD4
MD5 (120)
SHA1 (160)
SHA192(192指輸出長度), SHA256, SHA384
CRC-32 (不是一種加密算法,只是一種校驗碼應用機制,所以它不接受任何安全性)
單向加密算法:提取數據特徵碼
輸入一樣:輸出必然相同
雪崩效應:輸入的微小改變,將會引起結果的巨大改變
定長輸出:無論原始數據是多大,結果大小都是相同的
不可逆:無法根據特徵碼還原原來的數據
3)公鑰加密:(加密/簽名)
身份認證(數字簽名)
數據加密
密鑰交換
公鑰加密的算法:
RSA: 既能實現加密又能實現簽名
DSA:簽名,
ElGamal:是一種商業加密算法
公鑰加密本身可以實現兩種功能:身份驗證、加密數據,但也可以實現密鑰交換
四、基於密鑰的認證:
1、一臺主機爲客戶端(基於某個用戶實現):
1)生成一對密鑰
ssh-keygen
-t {rsa|dsa} 指定算法
-f /path/to/keyfile 表示密鑰文件
-N 'password' 指定密碼
2)將公鑰傳輸至服務器端某用戶的家目錄下的.ssh/authorized_keys文件中
使用文件傳輸工具傳輸(ssh-copy-id, scp)
用法:ssh-copy-id -i /path/to/pubkey USERNAME@REMOTE_HOST
3)測試登錄
scp: 基於ssh的遠程複製命令,可以實現在主機之間傳輸數據 (傳輸過程中是加密的)
用法:scp [options] SRC DEST
REMOTE_MACHINE
USERNAME@HOSTNAME:/path/to/somefile (遠程主機上的通常用這種格式)
eg:scp [email protected]:/etc/fstaab ./ 把遠程的複製到本機上來
2、基於密鑰認證的總結:
1)密碼應該經常換且足夠複雜;
2)使用非默認端口;
3)限制登錄客戶地址;
4)禁止管理直接登錄;
5)僅允許有限制用戶登錄;
6)使用基於密鑰的認證;
7)禁止使用版本1
五、小實例PKI(A、B間的加密通信)
證書:(主機,用戶)
用戶信息,公鑰
頒發者的信息,簽名
證書有效期限
A發送方:
1)計算數據的特徵碼(單向加密);
2)用自己的私鑰加密特徵碼,並附加在數據後面;
3)生成一個臨時對稱密鑰;
4)用此密鑰結合某算法加密數據及加密後的特徵碼;
5)對接收方的公鑰加密此對稱密鑰,並附加加密後的數據後面;
6)發送至接收方;
B接收方:
1)用自己的私鑰解密加密的對稱密鑰;
2)用對稱密鑰解密數據;
3)用對方的公鑰解密加密的特徵碼;
4)用同樣的算法計算數據的特徵碼,並與解密而來的特徵碼進行比較;
六、OpenSSL實現私有CA的原理過程:
1)創建CA
自己生成一對密鑰;(把公鑰做成證書)
生成自簽證書;
2)客戶端
生成一對密鑰;
生成證書頒發請求, .csr;
將請求發給CA;
3)CA端
簽署此證書;
傳送給客戶端;