“一机一证”是我自创的一个名词,意思是每一台物理服务器必须部署一张独立私钥的SSL证书,简称为“一机一证”,这个是目前所有网站在部署SSL证书时容易忽视或根本没有想到的安全问题,但是非常重要,所以,笔者认为有必要专门写一篇博文来讲这事。
用过SSL证书的用户都知道,SSL证书有通配证书,绑定域名*.yourdomain.com,也就是说,这张证书可以用于所有子域名网站,方便用户需要增加新的子域名网站时可以使用此证书马上部署,而无需向CA申请新子域名的SSL证书。
请大家看一下下面的截图,这是微软云服务Azure中国的服务器SSL证书申请记录,同一个通配域名为何要同时申请多张?按道理,只需一张通配证书就可以了!那为何微软要这样申请证书?笔者就这个疑问询问了微软云安全负责人,他给出的解释让我大长见识,特在此分享给大家。
大家都知道,为了合规,微软中国云服务的服务器都是托管在世纪互联的机房,由世纪互联负责相关管理,那么如何保证接入微软云服务系统的服务器的身份真实可信呢?如何保证不会有非法服务器接入微软云服务系统?答案是给每台接入云服务系统的服务器都配置SSL证书来证明服务器的合法身份和用于服务器中间的加密通信。因为SSL证书不仅仅是用于加密,其中一个重要作用是证明其身份,这就是为何点击查看SSL证书时显示如下的证书目的:向远程计算机证明你的身份和保证远程计算机的身份。
“向远程计算机证明你的身份”意思是证明此服务器的身份,远程计算机常见的是指用户使用的电脑,用户使用浏览器访问此网站时浏览器会在完成验证服务器的身份后正常显示“安全锁”标识。
“保证远程计算机的身份”这句话又是针对用户电脑来讲的,用户在使用浏览器同服务器通信时,服务器使用SSL证书来保证其可信身份。
“远程计算机”指双方互为远程计算机,不仅仅适合于浏览器同服务器通信,也适合于服务器之间的通信,服务器之间也都需要用SSL证书来证明各自的可信身份。
微软云服务系统中每台服务器都独立部署一张服务器证书,即使是同一域名,这样不仅能保证服务器身份的唯一性(证书唯一指纹、唯一私钥),更重要的是在需要吊销证书时非常方便管理,一台服务器出现问题不会影响其他服务器。
这里我再详细解释一下“一机一证”对于安全运维有多重要。对于大访问量的网站和业务系统一定有多台服务器,这些服务器都需要部署SSL证书,一般的做法是把绑定同一个域名的SSL证书部署在所有这些服务器上使用,这不仅节省了SSL 证书费用(只需买一张证书),而且简单复制服务器拷贝即可增加服务器数量。但是,这里面存在巨大的SSL证书使用风险,假如有100台服务器部署使用了同一张SSL证书,如果其中有一台服务器被黑或由于其他原因导致这张SSL证书私钥泄露,则必须吊销这张证书,这时候问题就来了,必须重新申请证书并把新证书重新部署到这100台服务器上,不仅工作量巨大,而且可能影响业务的正常运行。
而如果每台服务器都是使用独立一张证书的话,则只需吊销可能泄露的那台服务器部署的那张SSL证书即可,其他使用同一域名的服务器都不用动!这大大降低了运维成本,因为运维成本远比多购买一个SSL证书高。所以,最明智的选择是为每一台服务器都单独购买一张SSL证书,而不是使用同一张证书!现在,相信读者就能明白为何微软云要申请多张同一域名的通配证书的原因了吧。
读者也许还会问:那我申请通配证书有什么用?通配证书是为了在一台服务器上有多个子域名的网站系统能使用同一张SSL证书,而不是为了把这张证书用在不同的服务器上,虽然可以用在不同的服务器上。
最后总结一下:部署SSL证书必须是“一机一证”,每台服务器使用独立一张SSL证书,而不是共用一张证书,这样的部署方式虽然增加了SSL证书的购买成本,但是相对于服务器的可信身份管理和因证书泄露而吊销证书重新部署证书的管理成本来讲,总的运维成本还是要低许多的,因为运维的人工成本和安全成本比一张SSL证书要贵很多!笔者在此强烈推荐所有网站都要做到“一机一证”,而不要“丢西瓜而捡芝麻”和“因小失大”!