最近一段时间的在公司做的事情是:
1. 为公司的一些线上系统启用https(使用nginx反向代理的方式来实现,之前的应用无需做改动)
2.为符合规则的用户颁发数字证书(自建CA来实现,目前的用途是给公司的安卓和IOS app访问后台服务实现双向认证)
3.给安卓和IOS app提供消息推送的服务(安卓的推送自己来实现,IOS的使用apns来实现)
这些工作其中都涉及到了不少的东西,所以写一些文章记录下来,便于自己查看,如果有不对的地方,恳请指正。
今天先写一下数字证书相关的东西,即公钥基础设施体系和EJBCA.
公钥基础设施(Public Key Infrastructure),
参照百度百科的定义:
公钥基础设施是由公开密钥密码技术、数字证书、证书认证中心和关于公开密钥的安全策略等基本成分共同组成,管理密钥和证书的系统或平台。
其中涉及到的一些技术和公开秘钥加密算法等知识可以到网上去查找相关的信息(吴军老师的 数学之美 里有一篇文章是讲公开秘钥加密背后的原理的)
常用的一些概念:
CA (Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理
RA (Registration Authority)是数字证书认证中心的证书发放、管理的延伸。主要负责证书申请者的信息录入、审核以及证书发放等工作,同时,对发放的证书完成相应的管理功能
根证书:根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任,浏览器和操作系统中会内置一些常用的CA根证书,信任这些根证书的同时,也会信任这些根证书颁发的证书.
X.509 X.509是一种符合国际标准的证书格式,java语言提供了一些API来方便地读取X.509证书中的信息
SSL/TLS: SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密. 通常我们接触到SSL和TLS的地方都是在使用浏览器访问网页的时候(使用https),但其实SSL和TLS协议是独立于https的,其他运行在应用层的协议(比如SMTP)也可以配合SSL实现安全传输.
https : http + SSL (或者 http + TLS)
EJBCA是一个开源的,完整的CA实现,提供了独立搭建一套CA系统所需要的所有的功能(CA功能,管理界面,RA功能和接口,OCSP等等) EJBCA分为商业版和开源版两种,codebase是一样的,商业版本提供了更好的支持和更多的特性.学习和研究的话使用开源的版本就可以了
代码仓库的位置:https://svn.cesecore.eu/svn/ejbca/trunk/ejbca/
安装部署的文档:参考这篇文章:http://www.cnblogs.com/jiaoyiping/p/5814168.html
安装完成之后可以使用web界面来增加和删除用户,也可以通过ejbca提供的webservice接口来实现证书的创建,吊销和更新等工作.