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

之前的做法是:

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

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

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

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

. 需求概述

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构建服务器的安全工作。

[系统设计/开发] APP密钥签发服务器的更多相关文章

  1. 《PHP开发APP接口》笔记

    PHP开发APP接口 [TOC] 课程地址 imooc PHP开发APP接口 学习要点 APP接口简介 封装通信接口方法 核心技术 APP接口实例 服务器端 -> 数据库|缓存 -> 调用 ...

  2. Web程序员开发App系列 - 开发我的第一个App,源码下载

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

  3. Web程序员开发App系列 - 认识HBuilder

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

  4. Android学习系列(7)--App轮询服务器消息

    这篇文章是android开发人员的必备知识. 1.轮询服务器     一般的应用,定时通知消息可以采用轮询的方法从服务器拿取消息,当然实时消息通知的话,建议采用推送服务.    其中需要注意轮询的频率 ...

  5. 开发APP不搞清楚这20个问题,必然沦为一场灾难

    移动经济的高速增长极大刺激了企业和个人的APP开发热情,从卖野山鸡的到卖无人机的,从老大妈到小正太都跃跃欲试,更不要说那些传统企业的信息主管们了. 面对今天如过江之鲫的APP市场,很少有人意识到,移动 ...

  6. mui开发app之html5+,5+Runtime,5+sdk,native.js

    说说几个名词 html5:目前最新的html规范,w3c联盟制定,手机端主要由webkit实现规范,对用户来说就是浏览器实现了它 html5+:所谓"+",扩充了html5原本没有 ...

  7. mui开发app之联网应用传输数据

    手机的app分为,在线和单机,在线就是类似于C/S模式,能与服务器与他人共享数据的程序,单机就是在没有网络下可以玩转的app. 目前互联网盛行的时代,99%的程序都是联网环境下工作的.那么如何开发本地 ...

  8. mui开发app之cropper裁剪后上传头像的实现

    在大多数app项目中,都需要对用户头像的上传,之前做web开发的时候,我主要是通过input type=file的标签实现的,上传后,使用php对图片进行裁剪,这种方式比较传统简单. 此次app开发中 ...

  9. HTML5 开发APP(打开相册以及图片上传)

    我们开发app,常常会遇到让用户上传文件的功能.比如让用户上传头像.我公司的业务要求是让用户上传支付宝收款二维码,来实现用户提现的功能.想要调用相册要靠HTML Plus来实现.先上效果图 基本功能是 ...

随机推荐

  1. JVM类加载机制

    一.概述 JVM把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是JVM的类加载机制 二.类加载过程 加载—(验证—准备— ...

  2. css透明度的兼容!!!

    以前总是写透明度的代码,今天弄了个弹出框要求就边框透明,于是有了下边的结论,虽然很多东西不合理了,日后找到更合理在做更新!!! html <div class="new_playerf ...

  3. VS2010创建WebService的步骤

    1.新建网站 ---ASP.NET 空网站 2.添加新项---Web服务..

  4. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  5. Python基础教程-第一章-变量、函数、字符串

    1.1变量 变量基本上就是代表(或者引用)某个值的名字,举例来说,如果希望用x代表3,只需要执行下面的语句即可: >>>x = 3 这样的操作称为赋值(assignment),值3赋 ...

  6. Linux系统真正的优势以及学习方法

    作为一名Linux爱好者,在Linux的世界中也算是半个老司机了,从桌面玩到服务器.从ubuntu到centos.从计算机到路由器,各种Linux的花俏玩法都略有体验.作者并非职业Linux选手,我仅 ...

  7. 黑客长期摇号不中"黑"掉北京小客车摇号网

    新闻链接:http://www.2cto.com/News/201310/248936.html 新闻时间:2013-10-11 新闻正文: 为发泄长期摇号不中的不满,同时也为自己研发的软件打广告,硕 ...

  8. 删除Windows 服务

    删除的办法有两个: 办法一: 用sc.exe这个Windows命令 开始--运行--cmd.exe,然后输入sc就可以看到了.使用办法很简单: sc delete “服务名” (如果服务名中间有空格, ...

  9. Maven配置中scope说明

    Maven环境搭建完成后,需要去pom.xml文件中配置相关使用的jar架包. 如上图,架包选定之后需要配置对应的scope属性,下面来简单说下这些属性选项的含义: 1. compile,缺省值,适用 ...

  10. linux下用命令导出mysql表数据

    由于数据库服务器是内网环境,只能通过linux跳板机连接,所以navicat工具暂时用不上. 1.用Xshell工具连接跳板机 2.再通过跳板机连接数据库服务器 >ssh -p port ip ...