V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
aaronzheng
V2EX  ›  问与答

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

  •  
  •   aaronzheng · 2017-04-18 23:35:34 +08:00 · 2399 次点击
    这是一个创建于 2579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #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. 没问题后,终端 和 应用服务器 就进行沟通

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

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

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

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


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


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

    @hanguofu 正规 CA 怎么说也要硬件储存和各种安全审计吧………不做好这一套标准还不如不做,不要给其他人虚假的安全感
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:09 · PVG 05:09 · LAX 14:09 · JFK 17:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.