用c++寫https客戶端和伺服器大體步驟有哪些?
我想知道大體步驟是什麼?有什麼好的源碼或者文章或者書可以參考。
1.用libuv處理server socket
bind
listen
accept
read-&>write
2.用openssl處理ssl/tls,mem_bio可以使你不必使用openssl自己的socket操作
BIO_write
BIO_read
3.用joyent/http_parser解析http協議
4.構造響應信息,這是一個完全的字元串操作
5.反過來,用openssl加密
6.用libuv把數據寫入socket
完工
==========補充一個
windows下可以用schannel代替openssl;還有就是openssl也可以讀取.pfx文件,不必非要pem/pvk
如果你要練手,以熟悉 HTTP + SSL 協議的話,推薦看看這個:
doc/html/boost_asio/example/ssl/server.cpp
doc/html/boost_asio/example/ssl/client.cpp
如果你要具體用到實際項目中,強烈不建議自己造輪子,因為光 HTTP/1.0,HTTP/1.1,HTTP/2 就要自己解析協議搞半天,加上 SSL 就更複雜了,在你徒手解析協議的時候,其他人的產品都上線了。推薦以下庫:
curlpp:libcurl 的 C++ 封裝 GitHub - datacratic/curlpp: C++ bindings for cURL
cpp-netlib:基於 boost.asio 的一個網路庫 cpp-netlib: The C++ Network Library
HTTP Server API Version 2.0 Reference (Windows)
讀完這個你就懂了,就那麼幾個函數,自動使用IOCP和http.sys,根本無需擔心性能問題,只要寫你的業務邏輯就好了。
msdn還有良心sample:HTTP Server Sample Application (Windows)推薦使用Facebook proxygen庫https://github.com/facebook/proxygen,對於最新的標準都有支持。http client和http server都有比較簡單易懂的用例。
先實現網路庫。在網路庫底層的讀寫處理中插入ssl read,ssl send即可。
再在封包處理中實現http的解析。
具體的可以私信我,哈哈,我有寫。當然也建議仔細看muduo啦。
RFC2616
RFC2818
再加上你所要用的操作系統的socket網路開發。直接搞定。
大體流程如下:
詳細可參考:
HTTPS到底是個啥玩意兒?
未邀自來;)
既然問步驟的話,剛好我最近也在折騰這個,我的步驟如下:
- 證書類型(*nix常用的pem和windows常用的der文件等)
- x509證書文件結構(至少需要知道asn.1抽象語法、DER編碼,找一份源碼跟蹤一遍證書文件的格式解析)
- tls1.2時序協議(包括客戶端伺服器端,同樣找份源碼跟一遍)
上面所有這些東西都可以從wikirfc中找到;搞完所有這些,剩下的就是代碼層面的東西了
占坑,有空來答
system("start http")
直接改apache源碼。
實現過1個簡單的。
GitHub - adinosaur/minihttpd
我覺得學習來說,寫一個不錯的echo,和http server都挺鍛煉的
推薦閱讀:
※C++遊戲開發擇業前景?
※使用cocos2D遊戲引擎開發遊戲的話,是選擇使用cocos2D-x使用C++來編寫,還是使用cocos2D-html5來編程,原因是什麼?
※shell好難學,能用python替代shell嗎?
※學習 C++ linux 開發服務端,有哪些書籍和建議?
※計算機學生想通過造輪子學習伺服器端編程開發請教?