[系统设计/开发] APP密钥签发服务器

公司的信息安全制度要求对产线的APP进行严格的签发管理,确保密钥、密码的安全。

 

之前的做法是:

  1. 建立一台独立的签发主机;
  2. 密钥放在签发主机上,由专人管理;
  3. 构建系统每构建出一个产线APP,都要手动拷贝到该台主机上,人工输入密码进行签发,签好后再把APP拷出去

 

这个做法比较安全,但是有明显的缺点:

  1. 不方便,构建系统每构建出一个产线APP,都要找专人去拷贝APP、输入密码、拷出APP,很麻烦;
  2. 造成持续集成环境的脱节,之前,开发维护代码、构建系统下载代码、构建系统构建APP、发布到内部FTP、测试人员测试都是持续的过程,但是现在到了构建产线APP这一步就脱节了;

 

为了解决这个问题,部门领导让我重新设计一台签发服务器。经过多次收集需求,做了较长时间的分析,我给出了下述方案:

 

1. 需求概述

1.1 持续集成

CI上的APP构建系统在构建产线APP时,能自动连接签发服务器进行签发,使签发过程加入到持续集成环境

1.2 减少人工干预

签发服务器在运行期间只需要输入一次签发密码,可随时、连续签发构建系统指定的APP,直到签发服务器重后才需要重新输入签发密码;

1.3 安全保障

签发服务器做最大化安全设置,签发密钥和密码不落地、系统仅允许构建系统访问;

2. 概要设计

2.1. 签发服务器启动过程



2.2. 签发程序工作流程


2.2. 说明

2.2.1 持续集成的实现

  • 签发程序自动从内存读取加密的密钥和密码,不需要人工输入,实现不间断签发

  • CI通过参数控制构建系统是否构建产线版本,构建系统决定是否连接签发服务器:

    如果CI要求构建系统构建产线版本,则构建系统自动连接签发服务器并用产线的密钥签发;否则,构建系统用测试环境的密钥签发

  • 签发服务器自动从FTP服务器下载未签发APP、上传已签发APP

2.2.2 密码问题的解决

  • 用户启动加密程序将密钥和密码注入到内存中,签发程序签发APP时自动从内存读取加密的密钥和密码,替代人工输入;

  • 内存中加密的密钥和密码在重启服务器后被清空。

2.2.3 安全保障

  • 签发服务器仅允许构建服务器访问;

  • 签发密钥和密码加密注入内存、不落地;

 

有了这套方案,实现起来就比较简单了。其中一定会有一个问题:

密钥文件、密码是怎么注入内存的?

其实,我是在签发服务器上建立了redis服务,首先禁止它往本地写dump,使它只能把数据存在内存里;然后通过各种redis接口,把数据加密后放进去,以后取出来也是非常方便的。

另外,这个方案假定APP构建服务器是安全的,允许它访问签发服务器,因此,必须做好APP构建服务器的安全工作。 

 

posted @ 2015-12-11 18:11  hahp  阅读(928)  评论(0编辑  收藏  举报