PHP秘钥管理

November 1, 2016

做过PHP开发的同学们都应该有这么一个认识,PHP代码中的所有东西对开发者都是不透明的。只要有代码就可以看到所有的配置信息,但是这样会存在什么样的问题呢?前段时间也对此类问题做了些许思考,并提供了一个目前来看比较好的解决方案。

现状

目前比较常用的存储秘钥的方法,大致可分为如下几种:

  • 密钥明文存储到在代码文件
  • 密钥明文存储在某个隐蔽的地方
  • 加密后存储,加密算法暴露
  • 密钥服务器

针对以上几种方式,其实每种都不是一个完美的解决方案。将密钥明文存储到在代码文件中,是最直观,最直接的做法。相信很多项目中也还是这么做的。这样最大的缺陷就是秘钥直接暴露,完全没有隐私。密钥明文存储在某个隐蔽的地方,算是一种比较好的方法,将秘钥存在服务器上的某个地方,用部署脚本部署秘钥,但是存在服务器泄露的风险。加密后存储,加密算法暴露,其实就是掩耳盗铃!密钥服务器,属于风险转嫁,将风险转嫁给秘钥服务器,但是每次获取秘钥都需要和秘钥服务器有次交互,增加系统负担!

可以怎么做

基于上述原因,我们最终确定了我们解决方案–基于PHP扩展的秘钥存储
大致流程如下:

  • 生成一对RSA的公钥、私钥
  • 将公钥打包进一个工具组件keychain
  • 将私钥以PHP扩展的形式打包进我们的PHP扩展的秘钥存储中
  • 需要添加私密内容时用keychain加密明文,产生私钥文件
  • 将私钥文件注册给PHP秘钥扩展,然后直接获取,即可得到明文数据

Comments