加密:如何保护 Ubuntu 16.04 上的 NGINX Web 服务器
什么是让我们加密
Let’s Encrypt 是由互联网安全研究小组 (ISRG) 推出的免费证书颁发机构。它提供了一种简单且自动化的方式来获取免费的 SSL/TLS 证书——这是在 Web 服务器上启用加密和 HTTPS 流量的必要步骤。获取和安装证书的大部分步骤都可以通过使用名为 Certbot 的工具来自动化。
特别是,该软件可以在存在对服务器的 shell 访问的情况下使用:换句话说,当可以通过 SSH 连接到服务器时。
在本教程中,我们将了解如何使用
certbot
获取免费的 SSL 证书并将其与 Ubuntu 16.04 服务器上的 Nginx 一起使用。
安装证书机器人
第一步是安装
certbot
,软件客户端,它将自动化过程中的几乎所有事情。 Certbot 开发人员维护自己的 Ubuntu 软件存储库,其中包含比 Ubuntu 存储库中的软件更新的软件。
添加 Certbot 存储库:
add-apt-repository ppa:certbot/certbot
接下来,更新 APT 源列表:
apt-get update
此时就可以安装了
certbot
与以下
apt
命令 :
apt-get install certbot
Certbot 现已安装并可供使用。
获得证书
有多种 Certbot 插件可用于获取 SSL 证书。这些插件有助于获取证书,而其安装和 Web 服务器配置均由管理员负责。
我们将使用名为Webroot的插件来获取 SSL 证书。
在能够修改所提供的内容的情况下,建议使用此插件。证书颁发过程中无需停止Web服务器。
配置 NGINX
Webroot 的工作原理是在名为的目录中为每个域创建一个临时文件
.well-known
,放置在Web根目录中。在我们的例子中,网络根目录是
/var/www/html
。确保 Let’s Encrypt 可以访问该目录进行验证。为此,请编辑 NGINX 配置。使用文本编辑器打开
/etc/nginx/sites-available/default
文件 :
$EDITOR /etc/nginx/sites-available/default
在此文件的服务器块中,放置以下内容:
location ~ /.well-known {
allow all;
}
保存、退出并检查NGINX配置:
nginx -t
如果没有错误,它应该显示:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新启动 NGINX:
systemctl restart nginx
使用 Certbot 获取证书
下一步是使用 Certbot 和 Webroot 插件获取新证书。在本教程中,我们将保护(作为示例)域 www.example.com。需要指定应受证书保护的每个域。执行以下命令:
certbot certonly --webroot --webroot-path=<span class="highlight">/var/www/html</span> <strong>-d</strong> <span class="highlight">www.example.com</span>
在此过程中,Cerbot 将要求提供有效的电子邮件地址以用于通知目的。它还会要求与 EFF 共享,但这不是必需的。同意服务条款后,将获得新的证书。
最后是目录
/etc/letsencrypt/archive
将包含以下文件:
- chain.pem:让我们加密链证书。
- cert.pem:域证书。
fullchain.pem:组合
cert.pem
和
chain.pem
- privkey.pem:证书的私钥。
Certbot 还将创建指向最新证书文件的符号链接
/etc/letsencrypt/live/<strong>domain_name</strong>/
。这是我们将在服务器配置中使用的路径。
在 NGINX 上配置 SSL/TLS
下一步是服务器配置。在中创建一个新片段
/etc/nginx/snippets/
。 代码段是配置文件的一部分,可以包含在虚拟主机配置文件中。因此,创建一个新文件:
$EDITOR /etc/nginx/snippets/secure-example.conf
该文件的内容将是指定证书和密钥位置的指令。粘贴以下内容:
ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
在我们的例子中,
domain_name
将会
example.com
编辑 NGINX 配置
编辑默认虚拟主机文件:
$EDITOR /etc/nginx/sites-available/default
如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com
return 301 https://$server_name$request_uri;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/secure-example.conf
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
...
这将在 NGINX 上启用加密。
保存、退出并检查NGINX配置文件:
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新启动 NGINX:
systemctl restart nginx
结论
完成上述所有步骤后,现在我们有了一个基于 NGINX 的安全 Web 服务器,并由 Certbot 和 Let’s Encrypt 授予加密功能。当然,这只是一个基本配置,可以使用许多 NGINX 配置参数来个性化所有内容,但这取决于特定的 Web 服务器要求。