本文首發(fā)于作者的微信公眾號:網(wǎng)絡(luò)安全生命周期
原文鏈接:?加密,防止網(wǎng)站證書私鑰泄露
【風(fēng)險與背景】
如果網(wǎng)站使用的數(shù)字證書私鑰文件泄露,會造成什么后果呢?
黑客就可以構(gòu)建假冒的釣魚網(wǎng)站,借助DNS劫持,將用戶引導(dǎo)到假網(wǎng)站上面去,可竊取用戶的口令等敏感信息;或者黑客執(zhí)行中間人攻擊。
微軟2015年12月就曾出現(xiàn)*.xboxlive.com證書私鑰泄露事件,所幸及時發(fā)現(xiàn),吊銷了證書,事件未造成進(jìn)一步損失。
【現(xiàn)狀】
當(dāng)前,各大主流Web服務(wù)器在配置證書的時候,均使用文件形式的證書及私鑰文件,在配置文件中設(shè)置2個證書文件的路徑。
以Nginx為例:
server {
? ? listen? 443 ssl;
? ? ssl_certificate /path/to/fullchain.pem;
? ? ssl_certificate_key? /path/to/privkey.pem;
? ? ...
}
可以看出,私鑰文件直接明文存儲在文件系統(tǒng)。
如果黑客進(jìn)入到了這臺主機,就可以拿到證書的私鑰了。
【改進(jìn)思路】
將證書明文保存在文件系統(tǒng)中,不是一個好的實踐,那么可以怎么改進(jìn)呢?
筆者在設(shè)計Janusec Application Gateway時,采取的方法是將證書文件和私鑰文件都存儲在數(shù)據(jù)庫中,并且在寫入數(shù)據(jù)庫之前,先對私鑰文件的內(nèi)容進(jìn)行加密。
【實踐】
在基于Golang打造WAF網(wǎng)關(guān)一文中,提到了Janusec Application Gateway采用基于Web的統(tǒng)一的證書管理器來統(tǒng)一管理各業(yè)務(wù)的證書,并對證書私鑰采取了AES256的加密措施,加密后寫入數(shù)據(jù)庫,而不再使用文件形式存儲。
使用psql登錄進(jìn)Janusec所使用的PostgreSQL數(shù)據(jù)庫,查詢私鑰的結(jié)果看上去是這樣的(二進(jìn)制密文):
由于私鑰使用了加密技術(shù)存放于數(shù)據(jù)庫(不同的部署實例使用不同的加密密鑰),大大降低了私鑰泄露的風(fēng)險。
這是一款基于Golang打造的應(yīng)用安全網(wǎng)關(guān),具備WAF(Web應(yīng)用防火墻)功能、CC攻擊防御、組合策略配置,天然支持HTTPS,無需Agent,私鑰加密存儲在數(shù)據(jù)庫,提供負(fù)載均衡和統(tǒng)一的Web化管理入口。
這款產(chǎn)品已經(jīng)開源,如果有興趣,可到Github查看:
https://github.com/Janusec/janusec
( --完--)