HttpServer: 基於IOCP模型且整合Openssl的輕量級高效能web伺服器

一隻會鏟史的貓發表於2022-01-13

2021年4月寫過一個輕量級的web伺服器HttpServer,見文章: 《HttpServer:一款Windows平臺下基於IOCP模型的高併發輕量級web伺服器》,但一直沒有時間新增Openssl功能,也就是將HTTP擴充為HTTPS,從而提供安全訪問功能。

沒時間只是一方面,關鍵是整合openssl的難度也很大。

Windows的IOCP是一個高併發的非同步IO模型,Openssl對非同步IO支援的實現方式網上介紹的非常少,尤其是對IOCP模型。如果你的程式採用的是阻塞IO模型,使用openssl則非常簡單,通過SSL_set_fd函式將socket和ssl繫結即可,後面的SSL握手和業務資料通訊對於使用者來說就是一個黑盒,openssl會幫你搞定所有的一切。顯然,對於一個伺服器而言,阻塞IO模型不是一個很好的選擇。當然了,如果你不追求高效能,也可以採用多執行緒+IO阻塞模型的方式來實現一個伺服器,從而可以方便的使用openssl。
去年12月26號,一位使用者來信肯定了HttpServer的功能,同時也希望增加SSL(TLS)功能。這讓我重新燃起了將Openssl整合到IOCP模型的信心(說明還是有人會用HttpServer,因此加上SSL功能也是有一定的意義)。通過幾個星期的努力還是完成了此項功能,特此紀念。

HttpServer SSL版本下載地址

SSL配置

非常簡單,幾分鐘而已。下載HttpServer SSL版本,解壓後開啟HttpServer.ini配置檔案,在Section的[ssl]下進行證照和私鑰的配置:如下圖:

欄位說明

use:是否使用SSL,0表示不使用,1表示使用;
CertificatePathFile:證照檔案的全路徑名;
PrivateKeyPathFile:私鑰檔案的全路徑名;
Ciphers:加密套件配置規則,如:ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH,網上介紹很多,這裡就不說明了;
PrivateKeyPassword:私鑰檔案的密碼,如果私鑰檔案有口令(密碼),則在此處配置;

為方便大家測試,我在壓縮包中提供了cert.crt和privatekey.pem兩個檔案,由於是自己簽發的,沒有根證照授信,會被瀏覽器認為HTTPS連線不安全,要啥自行車。

啟動服務

雙擊HttpServer.exe即可,預設埠號是443,該埠可通過ini配置檔案進行修改。啟動後如下:

說明

1、openssl使用的版本是 openssl 1.1.1i,親自編譯的一個版本,還冒著熱氣,x86的開發環境下載地址: openssl1.1.1i

2、由於HttpServer.exe中包含了開啟其它程式的功能(呼叫CGI閘道器的執行檔案,比如php和python程式),因此可能會被防毒軟體誤認為是不安全的應用程式,可不必理會,特此說明。

3、我的所有下載服務都是由HttpServer提供,呵呵。

感謝您的使用!

相關文章