Tengine + BabaSSL ,讓國密更易用!

SOFAStack發表於2022-01-13


文|楊洋(花名:凱申 )

螞蟻集團高階技術專家

負責密碼學工程能力建設、BabaSSL 開源社群建設

本文 2366 字 閱讀 5 分鐘

近日,國內著名 Web 伺服器和反向代理開源軟體 TengineBabaSSL 完成了對 BabaSSL的適配工作。

Tengine 對 BabaSSL 提供的特殊 API 進行了適配,並增加對 NTLS 相關能力的支援。

「詳細 Pull Request 請見」:https://github.com/alibaba/tengine/pull/1595

至此,對我國密碼行業相關安全通訊協議,有使用需求的使用者可以直接使用 Tengine + BabaSSL 的組合。而無需額外的 patch 或者程式碼改動,從使用者使用的角度進一步提升了便利性。

PART. 1 NTLS

目前,我國密碼行業中有兩個主要的通訊協議相關的技術標準。一個是由信安標委於 2020 年釋出的 TLCP 協議,即傳輸層密碼協議;另外一個則是由密標委在 2012 年釋出的 GM/T 0024《SSL VPN 技術規範》(以下簡稱 0024)。

TLCP 和 0024 的具體內容差別不大,均是從 TLS 協議發展而來,他們的主要特點是將商用密碼演算法 SM2、SM3 和 SM4 應用到了 TLS 協議中,並使用 SM2 金鑰交換機制替換掉了 TLS 協議原有的金鑰交換流程。

TLCP 和 0024 另外一個顯著的特點將 TLS 協議中使用的數字證照拆分成了加密和簽名兩種用途的證照,加密證照和簽名證照以及對應私鑰均需要進行配置使用,所以 TLCP 和 0024 也俗稱“國密雙證照”協議。

BabaSSL 對上述國密雙證照協議進行了支援,並統稱為 NTLS。

NTLS 的全名為 National TLS,即我國核准的傳輸層安全協議,所以也可以叫做國密 TLS。

由此可見,NTLS 並不是指某一種具體的符合商用密碼相關技術標準要求的網路協議,而是多個協議的統稱。在 BabaSSL 中代指 TLCP 和 0024 國密雙證照協議,因為 NTLS 和標準 TLS 協議存在工作方式的不同,因此 BabaSSL 中增加了一些新的 API 來對其進行支援。而應用程式若想使用 NTLS 功能,就需要呼叫這些新增 API,給現有基於 OpenSSL API 進行適配的應用程式帶來了額外的開發工作量。

PART. 2 Tengine + BabaSSL

Tengine 是由淘寶網發起的 Web 伺服器專案,它在 Nginx 的基礎上,針對大訪問量網站的需求,新增了很多高階功能和特性。

Tengine 的效能和穩定性已經在大型的網站(如淘寶網,天貓商城等)得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的 Web 平臺。

Tengine 作為國內知名的開源 Web 伺服器軟體,在各領域均得到了廣泛的使用且享有很高的知名度。

BabaSSL 是一款輕巧、靈活且靠譜的密碼學和 TLS 協議工具集。BabaSSL 是螞蟻集團和阿里集團的各主要業務中所使用的底層密碼庫,目前開源出來供業界使用。BabaSSL 廣泛的應用在包括網路、儲存、移動端 App 等場景中。

Tengine 來源於 Nginx,所以預設使用的是 OpenSSL。此次 Tengine 針對 BabaSSL 中的 NTLS 功能進行了適配,使用者如果選擇使用 BabaSSL 作為 Tengine 的底層密碼庫來實現通訊加密的能力,則可以無需對 Tengine 進行任何程式碼改動,原生開啟 NTLS 能力。

PART. 3 Tengine 啟用 NTLS

具體來說,此次在 Tengine 中增加了幾個新的指令,對 NTLS 進行支援。

1. 下載 BabaSSL 和 Tengine

  • 前往 ? 下載 BabaSSL 的原始碼包:

https://github.com/BabaSSL/BabaSSL/releases

  • 前往 ? 獲取 Tengine 的最新程式碼:

「git clone」

https://github.com/alibaba/tengine.git

2. 編譯 BabaSSL 和 Tengine

使用如下配置:

./configure --add-module=modules/ngx_openssl_ntls \
    --with-openssl=../path/to/BabaSSL \
    --with-openssl-opt="--strict-warnings enable-ntls" \
    --with-http_ssl_module --with-stream \
    --with-stream_ssl_module --with-stream_sni

3. 配置 Tengine 開啟 NTLS

一個開啟了 NTLS 的 Tengine 配置檔案的例子:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    server {
        listen       443 ssl;
        server_name  localhost;
        enable_ntls  on;
        ssl_sign_certificate        server_sign.crt;
        ssl_sign_certificate_key    server_sign.key;
        ssl_enc_certificate         server_enc.crt;
        ssl_enc_certificate_key     server_enc.key;
        location / {
            return 200 "body $ssl_protocol:$ssl_cipher";
        }
    }
}
stream {
     server {
        listen       8443 ssl;
        enable_ntls  on;
        ssl_sign_certificate        server_sign.crt;
        ssl_sign_certificate_key    server_sign.key;
        ssl_enc_certificate         server_enc.crt;
        ssl_enc_certificate_key     server_enc.key;
        return "body $ssl_protocol:$ssl_cipher";
    }
}

4. 測試 NTLS

可以使用 BabaSSL 的 s_client 工具對開啟了 NTLS 的 Tengine 進行測試。

「具體可以參考」:

https://babassl.readthedocs.io/zh/latest/Tutorial/SM/ntls/

PART. 4 總 結

隨著網際網路業務的發展,在新時期下,資料成為了影響人們正常生活的核心要素。

因此資料安全和個人資訊保護等問題變得更加需要重視,國家近期也針對資料安全領域進行了相關立法。

密碼學技術作為整個資訊保安領域的基礎技術能力,對資料安全也存在著很大的影響。同時密碼行業是屬於受到國家強監管的行業,其相關技術的應用和實施均有一定的特殊性。

BabaSSL 作為一個開源的密碼庫,其核心目標之一就是為使用者提供合規的技術能力,使得使用者在符合要求的情況下可以更加便捷的將國家核定的技術標準應用起來。從而在滿足技術合規的要求,也同時實現了對資料安全需求的達成。

Tengine 作為國內著名的 Web 伺服器和反向代理開源軟體,在國內各行業的應用十分廣泛,同時也是網路通訊領域中實現對資料進行加密的關鍵開源軟體。此次 Tengine 官方對 BabaSSL 進行適配和支援,讓使用者可以更加便捷的使用 BabaSSL 所提供的商用密碼能力,也必將進一步的擴大各行業對商用密碼演算法的應用落地。

BabaSSL 在未來會持續在技術合規和前沿密碼學等方向上持續演進,給廣大使用者帶來高效、易用、安全、穩定的密碼學基礎庫。

BabaSSL 的程式碼目前託管在 Github 上:https://github.com/BabaSSL/BabaSSL

歡迎廣大開發者積極參與到 BabaSSL 的建設中,為我國密碼行業的發展壯大貢獻力量!

本週推薦閱讀

TLS 握手頻寬直降 80%,BabaSSL 是怎麼做到的

RFC8998+BabaSSL---讓國密駛向更遠的星辰大海

還在為多叢集管理煩惱嗎?OCM來啦!

一行降低 100000kg 碳排放量的程式碼!

img

相關文章