天天看點

HttpServer: 基于IOCP模型且內建Openssl的輕量級高性能web伺服器

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]下進行證書和私鑰的配置:如下圖:

HttpServer: 基于IOCP模型且內建Openssl的輕量級高性能web伺服器

字段說明

use:是否使用SSL,0表示不使用,1表示使用;

CertificatePathFile:證書檔案的全路徑名;

PrivateKeyPathFile:私鑰檔案的全路徑名;

Ciphers:加密套件配置規則,如:ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH,網上介紹很多,這裡就不說明了;

PrivateKeyPassword:私鑰檔案的密碼,如果私鑰檔案有密碼(密碼),則在此處配置;

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

啟動服務

輕按兩下HttpServer.exe即可,預設端口号是443,該端口可通過ini配置檔案進行修改。啟動後如下:

HttpServer: 基于IOCP模型且內建Openssl的輕量級高性能web伺服器

說明

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

2、由于HttpServer.exe中包含了打開其它程序的功能(調用CGI網關的執行檔案,比如php和python程式),是以可能會被防毒軟體誤認為是不安全的應用程式,可不必理會,特此說明。

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

感謝您的使用!