Tengine + BabaSSL ,让国密更易用!
文|楊洋(花名:凱申?)
螞蟻集團高級技術專家
負責密碼學工程能力建設
BabaSSL 開源社區建設
本文?2366?字 閱讀 5?分鐘
近日,國內著名 Web 服務器和反向代理開源軟件 Tengine(https://tengine.taobao.org)完成了對 BabaSSL(https://www.babassl.cn)的適配工作。
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 碳排放量的代碼!
總結
以上是生活随笔為你收集整理的Tengine + BabaSSL ,让国密更易用!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day4 vue 学习笔记 组件 生命周
- 下一篇: 搜索功能支持大小写模糊查询