20165304資訊安全系統設計基礎》實驗五 通訊協議設計
資訊安全系統設計基礎》實驗五 通訊協議設計
實驗要求:
任務一:Linux下OpenSSL的安裝與使用
1、基於Socket實現TCP通訊,一人實現伺服器,一人實現客戶端
2、研究OpenSSL演算法,測試對稱演算法中的AES,非對稱演算法中的RSA,Hash演算法中的MD5
3、選用合適的演算法,基於混合密碼系統實現對TCP通訊進行機密性、完整性保護。
4、學有餘力者,對系統進行安全性分析和改進。
任務二:在Ubuntu中實現對實驗二中的“wc伺服器”通過混合密碼系統進行防護
任務一:
1.參考老師提供的連結,進行下載並且安裝Linux下OpenSSL,在終端輸入,以完成安裝。
./config
make
make test
make install
然後進行編譯並執行:
gcc -o test_openssl test_openssl.c -L/usr/local/ssl/lib -lcrypto -ldl -lpthread echo $?
“-L”之後指定的是連結庫的路徑,由於要匯入OpenSSL所以使用-lcrypto引數
成功之後的截圖如下:
2.基於Socket實現TCP通訊
TCP伺服器端依次呼叫socket()、bind()、listen()之後,就會監聽指定的socket地址了,bind()函式把一個地址族中的特定地址賦給socket。例如對應AF_INET、AF_INET6就是把一個ipv4或ipv6地址和埠號組合賦給socket。
測試md5:
echo "plain.txt" | openssl dgst -md5
測試結果如下:
任務二
任務二:
在Ubuntu中實現對實驗二中的“wc伺服器”通過混合密碼系統進行防護
基於OpenSSL的程式都要遵循以下幾個步驟:
(1)、OpenSSL初始化:在使用OpenSSL之前,必須進行相應的協議初始化工作,可以通過下面的函式實現:int SSL_library_int(void);
(2)選擇會話協議:在利用OpenSSL開始SSL會話之前,需要為客戶端和伺服器制定本次會話採用的協議,目前能夠使用的協議包括TLSv1.0、SSLv2、SSLv3、SSLv2/v3。需要注意的是,客戶端和伺服器必須使用相互相容的協議,否則SSL會話將無法正常進行。
(3)建立會話環境。在OpenSSL中建立的SSL會話環境稱為CTX,使用不同的協議會話,其環境也不一樣的。申請SSL會話環境的OpenSSL函式是:SSL_CTX SSL_CTX_new(SSL_METHOD method);
當SSL會話環境申請成功後,還要根據實際的需要設定CTX的屬性,通常的設定是指定SSL握手階段證書的驗證方式和載入自己的證書。
(4)建立SSL套接字SSL套接字是建立在普通的TCP套接字基礎之上,在建立SSL套接字時可以使用下面的一些函式:
SSL SSl_new(SSL_CTX ctx);//申請一個SSL套接字
int SSL_set_fd(SSL ssl,int fd);)//繫結讀寫套接字
int SSL_set_rfd(SSL ssl,int fd);//繫結只讀套接字
int SSL_set_wfd(SSL *ssl,int fd);//繫結只寫套接字
(5)完成SSL握手在成功建立SSL套接字後,客戶端應使用函式SSL_connect( )替代傳統的函式connect( )來完成握手過程:
int SSL_connect(SSL *ssl);
(6)進行資料傳輸
當SSL握手完成之後,就可以進行安全的資料傳輸了,在資料傳輸階段,需要使用SSL_read( )和SSL_write( )來替代傳統的read( )和write( )函式,來完成對套接字的讀寫操作:
執行截圖如下: