背景介绍
目前中国的网络环境十分恶劣,运营商劫持的行为比比皆是,最好的对应方式就是把你的站点加密,即启用HTTPS协议。而且下一代HTTP协议(http 2.0)也是建立在HTTPS基础之上的。所以启用HTTPS是一举多得的行为。关于HTTPS协议本身网上有很多介绍,这里不详细说明了,不了解的可以去google一下。
要启用HTTPS,首先要有一个服务器证书,本文会详细介绍一下如何在Let’s Encrypt上申请到免费证书。
相信有很多朋友已经申请过StartSSL提供的免费证书,但最近有人发现StartSSL涉及到了中国的某公司,这意味着你的网站有可能被冒充。
root@kali:~/# host www.startssl.com
www.startssl.com has address 97.74.232.97 # Godaddy
www.startssl.com has address 52.7.55.170 # Amazon Web Services
www.startssl.com has address 52.21.57.183 # Amazon Web Services
www.startssl.com has address 52.0.114.134 # Amazon Web Services
www.startssl.com has address 50.62.56.98 # Godaddy
www.startssl.com has address 104.192.110.222 # QiHU 360 Inc.
www.startssl.com has address 50.62.133.237 # Godaddy
下面是摘自微博的评论:
@ruanyf 如果你正在使用StartSSL提供的免费证书,请小心了。它的私钥服务器现在放在360的机房,意味着理论上360可以冒充你的网站。网页链接
这个消息一放出之后,也有用户禁用了系统的StartSSL根证书,这部分用户在访问使用StartSSL证书的网站时会提示“站点不可信”。所以之前用StartSSL证书的用户换新证书也是十分有必要的。
Let’s Encrypt介绍
Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。
Let's Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let's Encrypt安装简单,未来大规模采用可能性非常大。
Let's Encrypt虽然还在测试当中,但是市场需求非常大,已经有非常多的朋友迫不及待地安装并用上了Let's Encrypt。Let's Encrypt向广大的网站提供免费SSL证书,不管是对于网站站长、互联网用户,还是对整个Web互联网,都是非常有利的,它有利于整个互联网的安全。
如何申请Let’s Encrypt的证书
Let’s Encrypt提供了很便捷的工具去申请证书。申请者首先要去获取工具。可以在本地机器上执行,也可以在网站服务器上执行。
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
执行上面的命令会自动下载缺失的依赖,没有问题的话会打印出来使用帮助。
帮助里提示了有几种获得证书的方式:
Choice of server plugins for obtaining and installing cert:
--apache Use the Apache plugin for authentication & installation
--standalone Run a standalone webserver for authentication
(nginx support is experimental, buggy, and not installed by default)
--webroot Place files in a server's webroot folder for authentication
这里要介绍一下这个申请工具的运作原理,执行它的时候会产生类似
1k8HnVu7aKIMcTm4XYzjYlmgLtMntkuhLCo8c8B3pyo.x24B1t7ILOHGEKSRUY3Wsg9OCNL2E7NJOff_xfZaa-s的字符串,然后接着它会请求http://www.zhoumingzhi.com/.well-known/acme-challenge/1k8HnVu7aKIMcTm4XYzjYlmgLtMntkuhLCo8c8B3pyo这个地址,再看返回的数据是不是上面那一堆字符串,如果是的话就说明申请者对这个域名有所有权,接下来就会发放证书文件。上面提到的那几种方式就是方便用户验证域名所有权的。为了方便理解,我们用通用性最好的方式——手动操作。
./letsencrypt-auto certonly --manual -d www.zhoumingzhi.com --email mingzhi22@gmail.com
执行上面的命令后会有几处让你确认的窗口,按OK就好。然后会出现类似这样的提示:
Make sure your web server displays the following content at
http://www.zhoumingzhi.com/.well-known/acme-challenge/ArUM149fkLfqBTg5cHw37_WRVGKpARnb1_fgpgNGhrw before continuing:
ArUM149fkLfqBTg5cHw37_WRVGKpARnb1_fgpgNGhrw.x24B1t7ILOHGEKSRUY3Wsg9OCNL2E7NJOff_xfZaa-s
现在需要配置你域名所对应的服务器,/.well-known/acme-challenge/ArUM149fkLfqBTg5cHw37_WRVGKpARnb1_fgpgNGhrw能返回ArUM149fkLfqBTg5cHw37_WRVGKpARnb1_fgpgNGhrw.x24B1t7ILOHGEKSRUY3Wsg9OCNL2E7NJOff_xfZaa-s,如果都准备好了的话按任意键继续,稍等几秒钟,证书就生成好了。