用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到底是個啥玩意兒?


未邀自來;)
既然問步驟的話,剛好我最近也在折騰這個,我的步驟如下:

  1. 證書類型(*nix常用的pem和windows常用的der文件等)
  2. x509證書文件結構(至少需要知道asn.1抽象語法、DER編碼,找一份源碼跟蹤一遍證書文件的格式解析)
  3. 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 開發服務端,有哪些書籍和建議?
計算機學生想通過造輪子學習伺服器端編程開發請教?

TAG:Linux | C | HTTP | 網路編程 | TCP |