65

加密,防止网站证书私钥泄露

 5 years ago
source link: https://studygolang.com/articles/14314?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文首发于作者的微信公众号:网络安全生命周期

原文链接: 加密,防止网站证书私钥泄露

【风险与背景】

如果网站使用的数字证书私钥文件泄露,会造成什么后果呢?

黑客就可以构建假冒的钓鱼网站,借助DNS劫持,将用户引导到假网站上面去,可窃取用户的口令等敏感信息;或者黑客执行中间人攻击。

微软2015年12月就曾出现*.xboxlive.com证书私钥泄露事件,所幸及时发现,吊销了证书,事件未造成进一步损失。

【现状】

当前,各大主流Web服务器在配置证书的时候,均使用文件形式的证书及私钥文件,在配置文件中设置2个证书文件的路径。

以Nginx为例:

server {

listen  443 ssl;

ssl_certificate /path/to/fullchain.pem;

ssl_certificate_key  /path/to/privkey.pem;

...

}

可以看出,私钥文件直接明文存储在文件系统。

如果黑客进入到了这台主机,就可以拿到证书的私钥了。

【改进思路】

将证书明文保存在文件系统中,不是一个好的实践,那么可以怎么改进呢?

笔者在设计Janusec Application Gateway时,采取的方法是将证书文件和私钥文件都存储在数据库中,并且在写入数据库之前,先对私钥文件的内容进行加密。

【实践】

基于Golang打造WAF网关 一文中,提到了Janusec Application Gateway采用基于Web的统一的证书管理器来统一管理各业务的证书,并对证书私钥采取了AES256的加密措施,加密后写入数据库,而不再使用文件形式存储。

使用psql登录进Janusec所使用的PostgreSQL数据库,查询私钥的结果看上去是这样的(二进制密文):

fQnqemR.jpg!web

由于私钥使用了加密技术存放于数据库(不同的部署实例使用不同的加密密钥),大大降低了私钥泄露的风险。

这是一款基于Golang打造的应用安全网关,具备WAF(Web应用防火墙)功能、CC攻击防御、组合策略配置,天然支持HTTPS,无需Agent,私钥加密存储在数据库,提供负载均衡和统一的Web化管理入口。

这款产品已经开源,如果有兴趣,可到Github查看:

https://github.com/Janusec/janusec

( --完--)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK