Let’s Encrypt简介
Let’s Encrypt是EFF、Mozilla、Cisco、Akamai、IdenTrust与密西根大学研究人员共同创立的组织,这是一个免费的凭证中心(Certification Authority,CA),目的在于推动全球所有的网站都使用HTTPS加密传输,并由非营利的网际网路安全研究组织Internet Security Research Group(ISRG)负责营运。
对于开发者来说,部署HTTPS是一个双赢的选择,用户可以借此获得更加安全的使用体验,而站点也能够抵御恶意软件的注入或广告追踪。Let’s Encrypt已于2015年12月3日进入公测(Public Beta),所有网站都可以免费获取Let’s Encrypt的证书。
据说Google优先收录带HTTPS加密的网站。
Certbot 简介
Certbot 是Let’s Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let’s Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的。Certbot 的官方网站是 https://certbot.eff.org/
获取Let’s Encrypt证书
安装certbot
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help
说明:
certbot-auto 和 certbot 本质上是完全一样的;不同之处在于运行 certbot-auto 会自动安装它自己所需要的一些依赖,并且自动更新客户端工具。因此在你使用 certbot-auto 情况下,只需运行在当前目录执行即可
certbot的两种工作方式
certbot (实际上是 certbot-auto ) 有两种方式生成证书:
- standalone 方式: certbot 会自己运行一个 web server 来进行验证。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先关掉它,以免冲突。
- webroot 方式: certbot 会利用既有的 web server,在其 web root目录下创建隐藏文件, Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。
standalone 方式:
service nginx stop
./certbot-auto certonly --standalone --agree-tos -v -t --email xxx@mail.com -d test.com -d www.test.com
--email
:自己的邮箱
-d
:域名,可以多个
如果申请成功,证书文件放在了/etc/letsencrypt/live下,获取一次有效期为90天
webroot 方式:
./certbot-auto certonly --webroot --agree-tos -v -t --email xxx@mail.com -w /home/wwwroot/test -d test.com -d www.test.com
-w
:网站目录
配置nginx,添加https
server{
listen 443 ssl;
server_name test.com www.test.com;
index index.html index.htm index.php;
root /home/wwwroot/test;
ssl_certificate /etc/letsencrypt/live/www.test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.test.com/privkey.pem;
}
http请求跳转到https
server {
listen 80;
server_name test.com www.test.com;
return 301 https://$server_name$request_uri;
}
如果用的是standalone方式别忘了重启nginx
service nginx start
自动续签
由于证书有效期是90天,所以我们可以用定时程序去续签
15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
- –pre-hook 这个参数表示执行更新操作之前要做的事情,因为我有 –standalone 模式的证书,所以需要 停止 nginx 服务,解除端口占用。
- –post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用
nginx部署HSTS
HTTP严格传输安全(HTTP Strict transport security,HSTS),配置浏览器对整个域名空间使用HTTPS来加密,它具备以下优点:
HSTS可以禁止浏览器使用无效证书(浏览器的默认策略是让用户决定是否放行,而用户往往因为不能区分无效是因为配置问题还是攻击而选择继续访问从而导致遭受网络攻击)
HSTS对以下情况可以仍然保持HTTPS通信:
- 用户保存了原始网站的书签
- 不安全的Cookie
- HTTPS 剥离攻击
- 网站内容混布,但需配合CSP(内容安全策略)
nginx部署HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
nginx https server完整代码:
server {
listen xxxx:443 ssl;
server_name www.test.com;
add_header Strict-Transport-Security "max-age=31536000;includeSubdomains;preload";
….
}