天天看點

openssl程式設計入門(含完整可編譯和運作示例) 目錄 1. 編寫目的 2. 示例包 3. 什麼是SSL? 4. 什麼是openssl? 5. 示例程式 6. 服務端編寫步驟 7. 用戶端編寫步驟 8. 相關頭檔案 9. 結尾

openssl程式設計入門(含完整可編譯和運作示例) 目錄 1. 編寫目的 2. 示例包 3. 什麼是SSL? 4. 什麼是openssl? 5. 示例程式 6. 服務端編寫步驟 7. 用戶端編寫步驟 8. 相關頭檔案 9. 結尾

OpenSSL程式設計入門(含完整示例)

易劍 2008/12/5

<a href="#_Toc5689%20">目錄 1</a>

<a href="#_Toc2277%20">1. 編寫目的 1</a>

<a href="#_Toc30261%20">2. 示例包 1</a>

<a href="#_Toc13878%20">3. 什麼是SSL? 2</a>

<a href="#_Toc5778%20">4. 什麼是openssl? 2</a>

<a href="#_Toc11216%20">5. 示例程式 2</a>

<a href="#_Toc17103%20">6. 服務端編寫步驟 3</a>

<a href="#_Toc19612%20">7. 用戶端編寫步驟 4</a>

<a href="#_Toc2571%20">8. 相關頭檔案 4</a>

<a href="#_Toc11175%20">8.1. socket頭檔案 4</a>

<a href="#_Toc14793%20">8.2. SSL頭檔案 4</a>

<a href="#_Toc29808%20">9. 結尾 5</a>

第一次跑起openssl示例并不太簡單,本文的目的是為了讓這個過程變得非常簡單。在開始之前,要非常感謝周立發同學,正是通過他共享的示例,較輕松的入了門。

本文檔對他共享的示例中的一個小錯誤進行了修正,并提供了傻瓜式的“編譯-生成-KEY運作”一條龍腳本(方法請參見壓縮包中的readme檔案),讓跑第一個openssl程式變得輕輕松松。

openssl程式設計入門(含完整可編譯和運作示例) 目錄 1. 編寫目的 2. 示例包 3. 什麼是SSL? 4. 什麼是openssl? 5. 示例程式 6. 服務端編寫步驟 7. 用戶端編寫步驟 8. 相關頭檔案 9. 結尾

ssl_test.tar.gz為示例源代碼包,openssl-0.9.8h-SuSE10.tar.gz為openssl二進制包(因超過2M,不能作為附件下載下傳,請上官網下載下傳),測試時是安裝在/usr/local/ssl。

ssl_test.tar.gz中的示例在SuSE10中測試通過,使用的是openssl-0.9.8h,它包括如下檔案:

-rw-r--r-- 1 root root 1346 Dec 5 18:11 cacert.pem

-rwxr-xr-x 1 root root 114 Dec 5 18:11 make_key.sh

-rwxr-xr-x 1 root root 172 Dec 5 18:37 mk_client.sh

-rwxr-xr-x 1 root root 172 Dec 5 18:37 mk_server.sh

-rw-r--r-- 1 root root 1679 Dec 5 18:11 privkey.pem

-rw-r--r-- 1 root root 167 Dec 5 18:39 readme

-rwxr-xr-x 1 root root 38 Dec 5 18:38 run_client.sh

-rwxr-xr-x 1 root root 64 Dec 5 18:38 run_server.sh

-rwxr-xr-x 1 root root 1140142 Dec 5 18:38 ssl_client

-rw-r--r-- 1 root root 3928 Dec 5 17:31 ssl_client.cpp

-rwxr-xr-x 1 root root 1139667 Dec 5 18:38 ssl_server

-rw-r--r-- 1 root root 4882 Dec 5 17:31 ssl_server.cpp

readme為包内容說明,run_server.sh用來運作服務端,run_client.sh用來運作用戶端,mk_server.sh用來編譯服務端,mk_client.sh用來編譯用戶端,make_key.sh用來生成鑰匙KEY。

在學習openssl程式設計之前,先了解一下什麼是SSL,有助于後續的學習。SSL 是一個縮寫,代表的是 Secure Sockets Layer。它是支援在 Internet 上進行安全通信的标準,并且将資料密碼術內建到了協定之中。資料在離開您的計算機之前就已經被加密,然後隻有到達它預定的目标後才被解密。證書和密碼學算法支援了這一切的運轉,使用 OpenSSL,您将有機會切身體會它們。

理論上,如果加密的資料在到達目标之前被截取或竊聽,那些資料是不可能被破解的。不過,由于計算機的變化一年比一年快,而且密碼翻譯方法有了新的發展,是以,SSL 中使用的加密協定被破解的可能性也在增大。可以将 SSL 和安全連接配接用于 Internet 上任何類型的協定,不管是 HTTP、POP3,還是 FTP。還可以用 SSL 來保護 Telnet 會話。雖然可以用 SSL 保護任何連接配接,但是不必對每一類連接配接都使用 SSL。如果連接配接傳輸敏感資訊,則應使用 SSL。

OpenSSL 不僅僅是 SSL。它可以實作消息摘要、檔案的加密和解密、數字證書、數字簽名和随機數字。關于 OpenSSL 庫的内容非常多,遠不是一篇文章可以容納的。

OpenSSL 不隻是 API,它還是一個指令行工具。指令行工具可以完成與 API 同樣的工作,而且更進一步,可以測試 SSL 伺服器和客戶機。

示例的說明請參見下面這篇周立發共享的文章。

openssl程式設計入門(含完整可編譯和運作示例) 目錄 1. 編寫目的 2. 示例包 3. 什麼是SSL? 4. 什麼是openssl? 5. 示例程式 6. 服務端編寫步驟 7. 用戶端編寫步驟 8. 相關頭檔案 9. 結尾
openssl程式設計入門(含完整可編譯和運作示例) 目錄 1. 編寫目的 2. 示例包 3. 什麼是SSL? 4. 什麼是openssl? 5. 示例程式 6. 服務端編寫步驟 7. 用戶端編寫步驟 8. 相關頭檔案 9. 結尾
openssl程式設計入門(含完整可編譯和運作示例) 目錄 1. 編寫目的 2. 示例包 3. 什麼是SSL? 4. 什麼是openssl? 5. 示例程式 6. 服務端編寫步驟 7. 用戶端編寫步驟 8. 相關頭檔案 9. 結尾

#include 

上面步驟應當畫得比較清楚了,結合圖再對照ssl_test.tar.gz和《加密通訊協定SSL程式設計.pdf》就可以非常快地上手了。

繼續閱讀