开发者社区> 初商> 正文

关于全站HTTPS,你必须知道的一些事儿

简介: 通过对数百个应用,百万级页面的深度改造,阿里巴巴目前已成为全球唯一大规模启用电商平台全站HTTPS的公司。
+关注继续查看

通过对数百个应用,百万级页面的深度改造,阿里巴巴目前已成为全球唯一大规模启用电商平台全站HTTPS的公司。

证书、私钥和CA

现在我们所说的证书一般是指服务器证书,也就是公钥加上域名、公司信息、序列号、签名信息等组成;

私钥和公钥相对应,私钥加密的东西只能公钥解密,公钥加密的东西只能私钥解密,并且不能由公钥推断出私钥,但是可以由私钥算出公钥来。所以这里有一件非常有意思的事情,你可以在公私钥不变的情况下换一张证书,因为证书其实包括其他信息,所以你换的是别的信息,这些信息的变化会导致证书签名也会变化,所以就变成了一张新的证书,但是公钥私钥是没有变化的。

CA也由证书和私钥组成,它的证书和普通的证书长得差不多,只是其中的Basic Constraint字段里面的CA值为True而已,普通的服务器证书这一块为False,但是因为有了这个True,所以CA可以签发别的证书。

服务器证书的分类

image.png

可以从两个维度去看证书的分类,一种是商业角度,为了区分不同的用户级别,服务端证书可以分成DV、OV和EV证书。

  • DV(Domain Validation)证书只进行域名的验证,一般验证方式是提交申请之后CA会往你在whois信息里面注册的邮箱发送邮件,只需要按照邮件里面的内容进行验证即可。
  • OV(Organization Validation)证书在DV证书验证的基础上还需要进行公司的验证,一般他们会通过购买邓白氏等这类信息库来查询域名所属的公司以及这个公司的电话信息,通过拨打这个公司的电话来确认公司是否授权申请OV证书。
  • EV证书一般是在OV的基础上还需要公司的金融机构的开户许可证,不过不同CA的做法不一定一样,例如申请人是地方政府机构的时候是没有金融机构的开户证明的,这时候就会需要通过别的方式去鉴别申请人的实体信息。

从业务角度来看证书还可以分成单域名证书、多域名证书、泛域名证书和多泛域名证书,具体可以参考表格里面的例子。

因为DV证书认证级别比较低,所以你查看DV证书的时候只能查看到域名信息,无法查看组织、公司信息,而OV和EV证书是可以的,特别是EV证书在地址栏上会展现成绿色的长条并且显示公司信息,给人的感觉比较专业和安全。

DV证书因为主要面向个人用户,安全体系会相对比较弱,所以只支持单域名和多域名证书,价格非常便宜,甚至现在有CA提供免费的DV证书(例如国内的wosign和国外即将上线的Let's Encrypt)。

OV和EV证书比较贵,除了需要人工验证之外,还在于他们有比较高的保险费用,如果CA的私钥出问题了,那么这些OV、EV证书都将得到巨额的赔偿,一般一张证书的赔偿金额都在100万美元以上。

这里最有特色的就是多泛域名证书,到现在为止也还没有正式的名字,我一般叫做Wildcard SAN certificate,简称WSAN,现在在CA的申请网页里面一般也很难看到有这样一个单独的申请选项,不过主流的CA现在都已经支持这种证书了,我所知道的Digicert和GlobalSign都可以申请,你如果有需要可以找他们的客服问问。

如何生成和查看CA/服务器证书

这是我觉得非常好的介绍如何创建Root、签发CA以及服务器证书的文章,大家有兴趣可以参考:https://jamielinux.com/docs/openssl-certificate-authority/

这里简单说一下为什么现在都是二层的CA架构?首先这二层CA我们一般叫做RootCA和IssuingCA,RootCA是自签名的,IssuingCA是由RootCA签发的。其实很早以前CA会直接使用他们的RootCA签发证书,但是因为RootCA的证书非常干净,上面没有任何的限制,容易出问题,所以现在都会签发一个pathlen=0的IssuingCA,再由这个CA去签发证书,表示这个CA只能签发普通证书,是无法在签发新的CA的。

CA的历史和事故

Verisign是第一家CA厂商,创办于1995年,当时得到了RSA算法的使用授权,是全世界最大的CA厂商,在2010年以12.8亿美元卖给了赛门铁克。当前TOP5的CA厂商分别是Symantec、Comodo、Godaddy、GlobalSign和Digicert,占据了90%以上的市场份额。

CA的历史上也出过几次严重的问题:

  • 2002年Verisign在未经微软授权的情况下签发了一张微软的证书,攻击者通过使用伪造的身份来通过Verisign的验证,最终的后果就是微软为此发布了一个紧急的更新补丁。
  • 2008年在实验室里通过MD5的碰撞获取了一个“真”的CA,用它签发出来的证书会被认为是浏览器里面已经受信的某个CA签发出来的。
  • 2011年连续出现了几次攻击,最严重的就是DigiNotar被伊朗的黑客入侵,签发了500多张未授权证书,所以他的Root全部被浏览器和操作系统吊销,整个公司也最终破产,可以说这是有史以来最严重的CA事故。

之后Google利用HPKP还发现了很多MITM(Man in the Middle)攻击,例如TURKTRUST和ANSSI,有兴趣的可以去搜索了解一下。

PKI体系介绍、漏洞和方案

PKI体系的原理就是浏览器内置可信赖的RootCA的证书,所有由这些RootCA签发出来的证书都信任。所以今天虽然很多网站已经上了HTTPS,但是如果另外一家CA他偷偷签发了同样域名的证书然后进行流量劫持或者篡改,我们也是无法知道的。

所以为了应对这种问题,现在比较主流的两种方案是HPKP和Certificate Transparency:

HPKP的基本原理就是用户在第一次访问的时候在Response Header里面发送给用户正确的域名证书的签名信息,之后用户在访问我们网站如果遇到了别的证书发现签名信息不匹配就上报甚至拒绝访问。

  • 当然这种方案缺点也很明显,它采用类似HSTS的所谓的首次信任原则,也就是认为用户第一次的请求是可信没有被篡改的,而实际上这个无法百分百保证。
  • 第二个问题是我们的证书太多,这样我们的配置发布系统就需要在证书更新之后发布新的签名信息给用户,而且还需要根据证书的有效期去设定返回头的有效期时间,如果再次遇到HeartBleed之类的攻击导致我们短期内大批量的吊销证书就蛋疼了。
  • 另外当前只有Chrome 38 和 Firefox 36以上的版本支持,不过用这个功能来进行汇报还是不错的选择,具体如何配置可以Google一下。

第二种方式是让CA支持的透明证书功能,也就是要求所有的CA将他们颁发的证书日志全部都公开出来,这样我们就可以检索所有CA看看是否在我们未授权的情况下颁发了我们的域名证书。

保障君注:本文原标题为《CA和证书那些事》

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19894 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29282 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22573 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16535 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20757 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14906 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23603 0
+关注
770
文章
584
问答
来源圈子
更多
阿里基础设施事业群,隐身于你接触到的阿里集团的各种服务和应用中。我们将在这个平台上与大家交流技术及IT行业的各种问题。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载