使用 SSL - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yueyoum
V2EX    程序员

使用 SSL

  •  
  •   ueyoum
    yueyoum 2014-10-28 14:48:16 +08:00 3208 次点击
    这是一个创建于 4032 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ssl 所用的证书如何生成,
    socket server如何验证client端,
    nginx https 如何配置

    这些问题一直都是网上搜来照搬着用,
    最近总结了一下。
    https://github.com/yueyoum/Using-SSL

    有示例代码和配置 解释了上面三个问题。

    不过 openssl 的命令还是从网上抄的……

    对这方面有研究的同学 一起交流交流。
    6 条回复    2014-10-30 10:42:07 +08:00
    mengzhuo
        1
    mengzhuo  
       2014-10-28 15:06:49 +08:00   1
    还有重新生成签名的时候一定要记得revoke之前的
    lj6684
        2
    lj6684  
       2014-10-29 16:00:58 +08:00   1
    SSL的证书通过OpenSSL(C工具)或者JDK(java工具)都可以生成
    需要的证书主要分3类:
    1. CA根证书(最终双方建立信任体系的源头,自签名证书)
    2. SSL服务器证书(由CA根证书签发,给服务器或应用用,代表Server端身份)
    3. SSL客户端证书(由CA根证书签发,双向SSL连接时需要客户端登陆时出示)

    SSL连接按认证级别分为2种:
    1. 单项SSL,只需要服务端配置有SSL服务器证书即可,客户端无证书,客户端对服务器进行认证
    2. 双向SSL,要求服务端有SSL证书,并且客户端访问时需要出示自己的SSL客户端证书,双方都会对对方的证书进行身份认证并且最终协商安全加密算法
    lj6684
        3
    lj6684  
       2014-10-29 16:02:04 +08:00
    对Java使用SSL有经验,Nginx经验无,原理性的问题可以帮助解答
    yueyoum
        4
    yueyoum  
    OP
       2014-10-29 17:44:11 +08:00
    @lj6684

    感谢,

    但我上网搜了很多openssl 生成证书的命令,
    发现 其实 server证书 和 client 证书的生成是同一个命令。只是输出的文件不一样。

    所以我后来 直接把 server证书给client用了, 用于server验证client,

    这么做对吗?

    如果不对,
    那么正确方式应该如何呢?
    lj6684
        5
    lj6684  
       2014-10-30 09:06:25 +08:00   1
    Server和Client端都有代表自己身份的证书,两边用相同的证书,从纯技术角度看应该可以成功完成认证建立SSL连接,因为证书都是来自同一个信任CA,并且都能通过有效性校验,但从使用角度来说这么做不合适

    说多一点,涉及到X.509证书的使用要求,X.509数字证书记载的关键信息简单分类看有
    1.证书的基本信息(证书持有者的名字,有效期...)基本信息是证书持有者最直观的表现,服务器证书的和客户端证书一般不一样;服务端证书的名字一般是应用域名,而客户端证书一般代表一个人或一台设备或一个组织。
    2.证书的扩展信息
    标识证书的使用范围和用法,其中就有说明此证书时用于服务端认证还是客户端认证,是否能用于SSL服务...,当带有扩展域的信息,应用就应该严格按照证书标识的用法去使用,但如果不带有相应扩展域的信息,代表通用证书,应用可以不去严格限制(你说的服务器证书也可以给客户端用,可能就是服务器证书中没明确标识这种用途限制)
    3.证书对应的密钥
    证书认证、加密过程时使用的非对称密钥

    根据以上原理看,合理的方式是服务端,客户端各自持有自己的证书,保障在统一个信任体系下,就可以完成认证
    服务端证书主题一般为应用/服务的域名,并且在扩展域中标识此证书只能用于SSL服务端认证
    客户端证书主题一般为登陆用户的名字,并且在扩展域中标识此证书只能用于SSL客户端认证
    [未来如果客户端使用双向SSL访问服务端的时候,在服务端能够从请求中提取到当前登陆的客户端证书信息,可以扩展来在服务端进一步进行用户份认证或权限校验。]


    上面才是标准SSL服务的证书使用规范,但如果应用要求不严格,或者对证书格式要求没有那么高,可以适当放宽要求,不加入那么多严格的限制
    yueyoum
        6
    yueyoum  
    OP
       2014-10-30 10:42:07 +08:00
    @lj6684

    感谢,

    那么能否 给个具体的 openssl 生成服务端/客户端证书的例子?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1306 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:14 PVG 01:14 LAX 09:14 JFK 12:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86