使用 Let's Encrypt 为网站连接加密

在前两篇文章中,我们已经成功搭建起了 LEMP 环境,并成功安装了 Typecho,这篇文章里我们将利用 Let's Encrypt 为网站添加 HTTPS 访问支持。

安装 Let's Encrypt 客户端

Let's Encrypt 提供了一个官方客户端,最新版本的客户端名字为 certbot ,而 Ubuntu 官方源里的还是旧版本,名字叫做 letsencrypt ,虽然是旧版本,但是功能已经够用了。直接安装即可。

sudo apt-get install letsencrypt

准备工作

Let's Encrypt 为网站生成证书之前,需要验证域名的所有权。Let's Encrypt 客户端使用的验证方式是在网站根目录下生成 /.well-known/acme-challenge/ 目录,并在该目录下生成一个验证文件。

默认情况下 Nginx 是不允许 /.well-known 这种隐藏目录被访问的,所以我们需要修改配置文件,保证该目录是可访问的。

blog 配置文件中增加以下配置信息:

location ~ /.well-known {
    allow all;
}

重启 Nginx 使配置生效。

获取证书

运行以下命令就可为根目录为 /var/www/htmlexample.comwww.example.com 获取证书

sudo letsencrypt certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com

一切正常的话,

letsencrypt 客户端会把获取的证书放在 /etc/letsencrypt/live/example.com/ 目录下

使用证书

/etc/letsencrypt/live/example.com/ 目录下有四个文件,我们需要用到的是 fullchain.pemprivkey.pem 这两个证书文件。

由于是一个证书文件可以应用到多个域名下,所以我们可以把证书配置信息放到单独一个文件中,用到的时候 include 一下就可以了。

我们在 /etc/nginx/snippets/ 下创建一个配置文件 ssl-example.com.conf , 并加入以下内容

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

再打开网站的配置文件,首先加入端口监听配置,并启用 http2 协议

listen 443 ssl http2;
listen [::]:443 ssl http2;

再加入配置包含信息

include snippets/ssl-example.com.conf;

重启 Nginx 使配置生效,使用 https://www.example.com 访问网站就可以看到效果了。

HTTP 重定向

为了达到更好的安全效果,我们可以把所有的 HTTP 请求都重定向为 HTTPS。

打开网站的 Nginx 配置文件,将 80 端口的配置块与 443 端口的配置块,大概是下面这个样子

server {
  listen 80;
  ......
}
server {
  listen 443;
  .....
}

我们在 80 端口的配置块中加入重定向命令和域名配置信息

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

重启 Nginx 生效。

标签:nginx / let's encrypt

知识共享许可协议
版权声明:本文版权属于作者 plumes,并受法律保护。
本作品采用知识共享「署名 - 非商业性使用 - 相同方式共享 3.0 未本地化版本」许可协议进行许可。