用OpenSSL結合ACE 做安全網路通訊

2021-04-28 17:36:21 字數 2489 閱讀 3381

1 ssl x509證書工作原理參考

1.1 公鑰密碼系統

在公鑰密碼系統中,加密與解密使用不同的金鑰。其中乙個金鑰為個人私有掌管,稱之為私鑰,另乙個金鑰是對外公開的,大家都可以獲取到。公鑰密碼系統的一大特點:用公鑰加密的報文只有私鑰才能解密。同樣,用私鑰加密的報文只有公鑰才能解密。

ssl證書由兩部分組成:私鑰、證書。證書中包含了公鑰、證書的摘要、ca的簽名以及其他擴充套件資訊。其中ca的簽名只有ca的公鑰才能解開。

1.2 ssl證書的校驗

證書的簽名

由認證中心ca用私鑰對各證書進行簽名。認證中心ca是個自簽名的x509證書。

證書的校驗

當乙個網路連線建立時,連線者雙方互換證書。可以要求ssl對對方的證書進行校驗。

圖表 1 1

如圖,當a連上b時,b可以要求對a的證書進行校驗:b用認證中心ca的證書(公鑰)對a的證書進行校驗(看是否有ca的簽名,每個不同的ca,簽名都不 一樣),如果校驗結果不成立,則斷開網路連線。同樣,a也可以要求對b的證書進行校驗。這一步雙方都可以確認對方身份。

1.3 ssl在通訊過程中的加解密

因為公鑰加解密運算量很大,對於比較大的資料用公鑰系統加解密是不夠現實的。事實上ssl在通訊過程中,首先約定一種對稱加解密方案,並設定密碼,這些操 作的通訊採用的是公鑰系統加解密;隨後的通訊則採用約定好的對稱加解密,並在一段時間後,又重新約定過新的對稱加解密方案。這樣既保證了安全,又有足夠的 效能在現實環境下應用。

約定對稱演算法

a發給b的約定報文用b的公鑰加密,這樣,只有b用b的私鑰才能解密,同樣,b發給a的約定報文用a的公鑰加密。

圖表 1 2

正常的報文通訊

a用約定的對稱演算法加密,b用約定的對稱演算法解密。同樣b用約定的對稱演算法加密,a用約定的對稱演算法解密。

圖表 1 3

2 用openssl 製作x509證書

2.1 建立自己的ca

在openssl 安裝目錄的bin 目錄下,執行指令碼:./ca.sh -newca(windows 環境下執行:perl ca.pl –newca),出現提示符時,直接回車。 執行完畢後會生成乙個demonca 的目錄,裡面包含了ca 證書及其私鑰。

2.2 生成客戶端和服務端證書申請

openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem

openssl req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem

2.3 簽發客戶端和服務端證書

openssl ca -in req1.pem -out sslclientcert.pem

openssl ca -in req2.pem -out sslservercert.pem

2.4 執行ssl 服務端和客戶端

openssl s_server -cert sslservercert.pem -key sslserverkey.pem -cafile democa/cacert.pem -ssl3 -verify 1

openssl s_client -ssl3 -cafile democa/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -verify 1

不出錯的話,應該可以正常通訊了。

3 用ace_ssl做安全的網路通訊

ace_ssl的通訊使用ace_ssl_sock_stream流。服務方接收器使用ace_ssl_sock_acceptor,客戶端聯結器使用ace_ssl_sock_connector。具體參考下面的**:

服務端:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int main(int argc, char* argv)

客戶端:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int main(int argc, char* argv)

用openssl進行SSL程式設計

主要介紹openssl進行ssl通訊的一些函式以及過程,主要是初始化過程,至於資料的接收以及後續處理可以具體問題具體分析。load所有的ssl演算法 openssl add ssl algorithms 建立ssl所用的method ssl method meth sslv23 method 初始化...

用openssl自簽名證書

進入命令列 1.進入證書存放的路徑 rm rf ssl 假如ssl資料夾已經存在 mkdir ssl cd ssl 2.生成金鑰 openssl genrsa des3 out ssl.key 1024 輸入密碼 isec openssl rsa in ssl.key out ssl.key 輸入密...

用openssl來加密檔案

使用 openssl 的常規方式是 openssl command command options arguments 在 linux 中加密檔案要加密當前工作目錄的內容 根據檔案的大小,這可能需要一點時間 tar czf openssl enc e aes256 outsecured.tar.gz...