证书授权中心(双向 SSL 和 CA 相关问题)

2017-04-18 23:35:34 +08:00
 aaronzheng
#1.1. 目前业务要求,需要 终端 和 服务端 两边都用 SSL 进行通讯验证
#1.2. 简单想法的话,就是 终端 和 服务端 都各自生成各自的密钥对,然后各自发对方公钥,就可以进行沟通
#1.3. 但是后来,考虑到 终端数目 和 服务端数目 都可能扩展和增加的,不能单纯的配置双向 SSL
#1.4. 于是就开始查阅相关资料,应该是要用到一个自建的 CA 机构(或者是 PKI 公钥基础设施这个更大的系统体系,目前不考虑用外面的 CA 机构)

目前构想的情景是这样的, v 友看下,思路有没问题(因为我也是第一次碰这个)
#2.1. 终端生成私钥+公钥(目前设想的是 Android 系统跑 jar 包生成)
#2.2. 发送公钥+终端信息到 CA 机构进行注册,审核,和用 CA 机构的私钥加密,弄成一个数字证书(目前是自己写一个 CA 机构,可能不会用到 PKI 这种大体系,只单纯实现最核心的几个功能,例如证书生成,撤销,更新。目前打算底层用的是 shell script 写的 openSSL ,然后用的是 Java 进行调用脚本语言)
#2.3. 把数字证书,分发到终端
#2.4. 应用服务器重复上面的流程
#2.5. 最终 终端 和 应用服务器 通信,把各自的数字证书发送对方,然后双方都拿收到的数字证书去 CA 机构进行检验
#2.6. 没问题后,终端 和 应用服务器 就进行沟通

这个是我的设计思路,求相关资料参考/或者书籍。因为我对这个也不是太多研究,所以希望可以给点建议,好的引导可以少走点弯路,哈。
2458 次点击
所在节点    问与答
5 条回复
lty1993
2017-04-19 04:10:07 +08:00
Cloudflare 做了套工具叫 cfssl ,你可以拿这个自建 CA 体系,相关文章还是挺多的。不过 CA 难在管理和审计,并不在证书签发。
ryd994
2017-04-19 07:36:43 +08:00
绝大多数情况,服务器 SSL+账号密码登录就够了,安全性足够的

你这个做法我看到有几个问题:
1. #2.2 怎么验证客户端身份?这里可以中间人
2. 你是不是忘了部署根证书这一步,这里也可以中间人
3. 验证证书不需要和 CA 通讯,只需要根证书
4. CRL 呢?
5. 怎么保护 CA 密钥?
6. 签发记录 /日志
7. #2.4 应用服务器有一个证书就够了,域名相同的话多个服务器也可以共享

真心不建议自建 CA ,签发用 OpenSSL 就能搭出来。管理不好才是大坑。
hanguofu
2017-04-20 22:45:33 +08:00
我觉得楼主的想法没什么大的问题, 我的建议是使用 OpenSSL 自己签发 , 搞双证书认证 。至于 ryd994 说的管理不好,我不是很明白什么意思。

一家之言,仅供参考。
aaronzheng
2017-04-21 00:30:43 +08:00
@lty1993 我研究了下 cfssl 那套,总体是可行的,不过一些业务场景满足不了,最后还是采取自己建立一套类 PKI 的体系。


@ryd994 感谢你的建议啊!!!一般情况下,的确是单向 SSL 就够了。但目前是我们有自己的终端,所以必须走双向 SSL 。中间人这个问题,我们考虑了很久,最后决定, CA 在局域网,在终端出厂前,终端公钥和密钥在 CA 生成,签名数字证书,包成密钥库,然后直接安装 CA 信任链 到终端,和放 密钥库 到终端。最后通过现场方式发放 密钥库的 通行码。至于 CRL 那部分,目前通过业务去解决,不在技术层面完成。(还考虑了其他一些攻击,例如密钥库被盗用了,在验证的时候,在传输层验证后,还会上升到应用层做验证的)


@hanguofu 对的,目前就是打算 OpenSSL + keytool 来完成签发等任务。其实 ryd994 说的管理,是因为要考虑到 证书的撤销 和 证书的更新,等流程。
ryd994
2017-04-21 00:38:10 +08:00
@aaronzheng 规模大的话不要直接拿根 CA 签
签个中级 CA 平时用,根 CA 冷储存,出事了就可以 crl revoke 中级 CA ,但不需要重新部署根 CA

@hanguofu 正规 CA 怎么说也要硬件储存和各种安全审计吧………不做好这一套标准还不如不做,不要给其他人虚假的安全感

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX