启用SSL已经有段时间了,使用的是 Let’s Encrypt 免费证书,除了需要每季度更新一次维护外,一切正常使用,包括WEB和iOS,因为历史原因Android还没有完全切到HTTPS协议,也正因为漏掉Android这一块无意间避过了中间证书的问题,一直到微信小程序开发过程中发现接口访问报 request fail 错误,由此填坑的过程揭开SSL中间证书的面纱
先来认识一下中间证书
中间证书,其实也叫中间CA(中间证书颁发机构,Intermediate certificate authority, Intermedia CA),对应的是根证书颁发机构(Root certificate authority ,Root CA)。为了验证证书是否可信,必须确保证书的颁发机构在设备的可信 CA 中。SSL的验证机制是由一级一级追溯验证,当前CA不可信则向上层CA验证,直到发现可信或没有可信CA为止,注意有时候Intermedia CA也有可能在设备的可信CA中,这样不用一直追溯到Root CA,即可认证完成。
根证书,必然是一个自签名的证书,“使用者”和“颁发者”都是相同的,所以不会进一步向下检查,如果根 CA 不是可信 CA ,则将不允许建立可信连接,并提示错误。
一般Root CA是要求离线保存的,如果要签发证书也是通过人工方式签发,这样能最大程序保证Root CA的安全,而Intermedia CA则相对宽松,允许在线签发证书的,这样方便高效,安全性灵活,即便通过Root CA签发的Intermedia CA发生意外泄露,也可以通过Root CA进行撤销
中间证书的运行机制
阅读全文…
大家都知道网站启用SSL数字证书后使用HTTPS协议可以保证服务器与浏览器端数据加密,但与此同时不可避免另外一个问题,总存在部分用户会直接输入域名的方式访问网站,默认浏览器是使用HTTP协议访问网站的,此时即便网站启用了SSL数字证书,此时用户与服务器端的数据交互仍然使用的是明文传输方式,用户数据得不到保护,因为SSL数字证书没有生效。
可能你会说那不如直接关闭80端口吧(好吧,如果你是API等后台服务大可不必考虑前台用户访问的问题)或HTTP访问的时候直接跳转到HTTPS协议吧(直接跳转其实也存在『中间人』攻击风险),其实这个问题有更好的方案,这就是下面要介绍的
HSTS(HTTP Strict Transport Security),它是一个Web安全策略机制(web security policy mechanism),它通过服务器为HTTP响应增加如下一个Header 来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险:
Strict-Transport-Security:max-age=63072000; includeSubdomains; preload
只要在服务器返回给浏览器的响应头中,增加 Strict-Transport-Security这个HTTP Header 浏览器都将直接强制性的发起HTTPS请求,现在访问机制如下
阅读全文…
Let’s Encrypt是由 ISRG(Internet Security Research Group,互联网安全研究小组)发起,由Mozilla、Cisco、Akamai、Electronic Frontier Foundation 和 Chrome 等众多公司和机构支持的免费、自动化、开放的证书签发服务。
Let’s Encrypt 与 IdenTrust 的 DST Root CA 做了交叉认证,兼容性还是非常不错的,目前能做到主流系统包括XP系统也能得到很好的支撑,同时安全性上面Let’s Encrypt支持ECC 证书(目测采用的是ECDHE 密钥交换、RSA 签名方式)
Let’s Encrypt目前完全免费,支持3个月证书有效期,到期可自动续签,关于有效期这个应该是一个就安全性考量的策略,好在自动化做的非常不错,再加上各种自动化的申请、过期续签方案,已经做到很方便了。
Let’s Encrypt 的证书签发过程使用的是 ACME (Automated Certificate Management Environment)协议,目前官方和第三方工具都是基于此协议,官方推荐工具列表在这里
这里推荐 acme.sh 实测系统兼容性非常好,对其他库的依赖和版本依赖相对较小,CentOS 5.8系统 python 2.4.3 完美实现,这里简单讲一下acme.sh的安装和使用吧,官方有中文教程 在这里 阅读全文…