在 Debian 10 Linux 上使用 Let's Encrypt 保护 Nginx

2023-10-30

Let’s Encrypt 是由互联网安全研究小组 (ISRG) 开发的免费、自动化、开放的证书颁发机构,提供免费的 SSL 证书。

Let’s Encrypt 颁发的证书受到所有主要浏览器的信任,并且自颁发之日起 90 天内有效。

本教程展示了如何在 Debian 10、Buster(运行 Nginx 作为 Web 服务器)上安装免费的 Let’s Encrypt SSL 证书。我们还将展示如何配置 Nginx 以使用 SSL 证书并启用 HTTP/2。

先决条件#

在继续阅读本指南之前,请确保满足以下先决条件:

  • 以 root 或用户身份登录须藤权限 .
  • 您要获取SSL证书的域名必须指向您的公共服务器IP。我们将使用example.com.
  • 已安装 Nginx .

安装Certbot#

我们将使用 certbot 工具来获取和续订证书。

Certbot 是一款功能齐全且易于使用的工具,可自动执行获取和续订 Let’s Encrypt SSL 证书以及配置 Web 服务器以使用证书的任务。

certbot 软件包包含在默认的 Debian 存储库中。运行以下命令安装 certbot:

sudo apt updatesudo apt install certbot

生成 Dh (Diffie-Hellman) 组#

Diffie-Hellman 密钥交换 (DH) 是一种通过不安全的通信通道安全交换加密密钥的方法。

我们将生成一组新的 2048 位 DH 参数来增强安全性:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

您还可以将大小更改为最多 4096 位,但生成可能需要超过 30 分钟,具体取决于系统熵。

获取 Let's Encrypt SSL 证书#

要获取域的 SSL 证书,我们将使用 Webroot 插件。它的工作原理是创建一个临时文件来验证所请求的域${webroot-path}/.well-known/acme-challenge目录。 Let’s Encrypt 服务器向临时文件发出 HTTP 请求,以验证请求的域是否解析为 certbot 运行的服务器。

我们将映射所有 HTTP 请求.well-known/acme-challenge到单个目录,/var/lib/letsencrypt.

运行以下命令创建目录并使其可供 Nginx 服务器写入:

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

为了避免重复代码,我们将创建两个片段,将其包含在所有 Nginx 服务器块文件中。

打开你的文本编辑器并创建第一个片段,letsencrypt.conf:

sudo nano /etc/nginx/snippets/letsencrypt.conf
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

第二个片段ssl.conf包括推荐的削片机Mozilla,启用 OCSP Stapling、HTTP 严格传输安全 (HSTS),并强制执行一些以安全为重点的 HTTP 标头。

sudo nano /etc/nginx/snippets/ssl.conf
/etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

完成后,打开域服务器块文件并包含letsencrypt.conf片段如下所示:

sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/example.com.conf
server {
  listen 80;
  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;
}

创建一个符号链接到sites-enabled启用域服务器块的目录:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

重启Nginx服务使更改生效:

sudo systemctl restart nginx

您现在可以通过运行以下命令来获取 SSL 证书文件:

sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

如果成功获取SSL证书,您的终端将打印以下消息:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-02-22. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

编辑域服务器块并包含 SSL 证书文件,如下所示:

sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/example.com.conf
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
}

上面的配置告诉我们Nginx 从 HTTP 重定向到 HTTPS以及从 www 版本到非 www 版本。

重新启动或重新加载 Nginx 服务以使更改生效:

sudo systemctl restart nginx

使用打开您的网站https://,您会注意到一个绿色的锁图标。

如果您使用以下命令测试您的域SSL 实验室服务器测试,你会得到一个A+等级,如下图所示:

自动续订 Let's Encrypt SSL 证书#

Let’s Encrypt 的证书有效期为 90 天。为了在证书过期之前自动更新证书,certbot 包创建了一个 cronjob 和一个 systemd 计时器。计时器将在证书到期前 30 天自动更新证书。

当证书更新时,我们还必须重新加载 nginx 服务。打开/etc/letsencrypt/cli.ini并添加以下行:

sudo nano /etc/letsencrypt/cli.ini
/etc/cron.d/certbot
deploy-hook = systemctl reload nginx

通过运行以下命令来测试自动续订过程:

sudo certbot renew --dry-run

如果没有错误,则表示更新过程成功。

结论#

如今,拥有 SSL 证书是必须的。它可以保护您的网站,提高 SERP 排名位置,并允许您在 Web 服务器上启用 HTTP/2。

在本教程中,我们向您展示了如何使用 certbot 脚本生成和续订 SSL 证书。我们还向您展示了如何配置 Nginx 以使用证书。

要了解有关 Certbot 的更多信息,请访问证书机器人文档 .

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Debian 10 Linux 上使用 Let's Encrypt 保护 Nginx 的相关文章

随机推荐

  • LoadRunner获取登录验证码

    原理很简单 用一个请求去刷新认证码返回页面 然后通过关联将返回的图片保存为硬盘的一个文件 然后用ocr去识别这个文件内容 保存结果到txt 最后用LR读这个文本就可以得到认证码 方法都是在网上搜的 但是本人经过实验验证成功了 代码如下 Ac
  • keyError:255 (Python连接数据库时)出错的解决办法:

    用Python连接数据库时的出现错误 解决办法 把pymysql包升级一下就好了 如果是用anaconda安装的Python 则在相应的环境中把pymysql 更新 update 一下
  • 如何在 AWS 实例上设置 WHM 和 cPanel

    WHM cPanel 是广泛用于 Linux 托管环境的基于 Web 的系统管理控制面板 要在AWS环境上使用WHM cPanel 我们将面临正常实例的问题 因此 我们更喜欢在aws中使用VPC 虚拟私有云 来安装WHM和cPanel服务器
  • 如何在 Debian 10 上安装 Google Cloud SDK

    谷歌云SDK提供了一组用于管理 Google Cloud Platform GCP 上托管的资源的工具 Cloud SDK 软件开发工具包 提供 gcloud gsutil 和 nd bq 命令 能够通过终端访问 Google Cloud
  • 如何在 Ubuntu 上安装和配置 Dovecot

    Dovecot 是一款开源 IMAP 和 POP3 电子邮件服务器 因其可靠性 可扩展性和易用性而被广泛使用 POP3 邮局协议 3 和 IMAP 互联网消息访问协议 都是用作消息访问代理的协议 这些协议用于从邮件服务器上的用户收件箱中获取
  • Linux /etc/shadow 文件

    基于 Linux 的系统以其强大的安全措施而闻名 可隔离敏感数据以确保最大限度地减少未经授权的访问 其中一项数据就是用户密码 与某些人的想法相反 这些密码不再以纯文本形式存储 甚至不再存储在 etc passwd 文件中 相反 它们以加密方
  • Ubuntu 18.10 发布、功能及更多

    简介 Ubuntu 开发团队现已开始开发 Ubuntu 18 10 的下一个版本 本文将为您提供有关 Ubuntu 18 10 的所有详细信息 Ubuntu 18 10 Cosmic Cuttlefish Release Date Feat
  • 配置 Sendmail 以通过远程 SMTP 服务器进行中继

    Sendmail 是基于 Unix 的系统上最古老且最流行的邮件传输代理 MTA 之一 它具有高度可定制性 这使其成为许多专业人士的首选 但这种灵活性也让它看起来令人畏惧 Sendmail 的一个关键功能是它能够通过远程 SMTP 服务器中
  • 如何通过 Docker 运行“npm start”

    npm 是 JavaScript 编程语言的软件包管理器 npm 使 JavaScript 开发人员可以轻松共享他们编写的代码 npm 还提供了一个命令行界面来管理项目中的依赖项 Docker 是一个容器化平台 允许开发人员将其应用程序和依
  • 如何在 CentOS 8 上安装 Ionic 框架

    Ionic 框架是开源 UI 工具包 用于使用 HTML CSS 和 JavaScript 等核心 Web 技术构建移动和桌面应用程序 Ionic 旨在在所有当前的移动设备和平台上完美地工作和显示 本文将帮助您在 CentOS 8 和 RH
  • 如何在 CentOS 和 RHEL 上设置 PHP eAccelerator

    PHP电子加速器用于通过优化和缓存编译状态来提高 php 脚本的性能 eAccelerator 将编译后的 PHP 脚本存储在共享内存中并直接从中执行代码 eAccelerator 通常可以减少服务器负载并将 PHP 代码的速度提高 1 1
  • 如何在 Ubuntu 18.04 上安装谷歌浏览器

    Google Chrome 是互联网用户最流行的网络浏览器 它适用于最流行的操作系统 如 Windows Linux 和 Android 设备 你也可以安装铬浏览器在你的 Ubuntu 系统上 开发团队使用 Chromium 源代码构建 C
  • 如何在 AWS 实例中获取默认 Windows 密码

    Amazon是领先的云托管提供商 您可以从 AWS 获得任何类型的服务器 从非常小到非常大 如果您已在 AWS EC2 托管帐户中创建了 Windows Server 实例 本文将帮助您了解如何在 AWS 实例中查找 Windows Ser
  • 5 个最佳 WordPress 托管提供商

    1 WP引擎 WP Engine 是适用于大容量网站的最佳且完全托管的 WordPress 托管 如果您的网站有数百万流量 您可以使用 WP Engine 托管 WP Engine 提供稳定 安全的托管 可以容纳您的所有客户 它的成本可能不
  • 如何在 Ubuntu 18.04 上安装 Atom 文本编辑器

    Atom是由GitHub开发的开源跨平台代码编辑器 它有一个内置的包管理器 嵌入Git控制 智能自动完成 语法突出显示和多个窗格 从本质上讲 Atom 是一个基于 Electron 构建的桌面应用程序 使用 HTML JavaScript
  • 如何在 Debian 9 上安装 R

    R 是一种快速发展的开源编程语言和环境 专门从事统计计算和图形表示 它由 R 统计计算基金会支持 主要供统计学家和数据挖掘人员用于开发统计软件和执行数据分析 本教程将引导您了解如何在 Debian 9 系统上安装 R 先决条件 在继续本教程
  • 如何在 Ubuntu 20.04 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 例如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 并通过 Redis Cluster 跨多个 Redi
  • Linux 中的 dmesg 命令

    Linux 内核是操作系统的核心 它控制对系统资源 如 CPU I O 设备 物理内存和文件系统 的访问 在引导过程中以及系统运行时 内核将各种消息写入内核环形缓冲区 这些消息包括有关系统操作的各种信息 内核环形缓冲区是物理内存的一部分 用
  • 如何在 CentOS 8 上设置 Nginx 服务器块

    服务器块是一种 Nginx 指令 它定义特定域的设置 允许您在一台服务器上运行多个网站 对于每个网站 您可以设置网站文档根目录 包含网站文件的目录 创建单独的安全策略 使用不同的 SSL 证书等等 本文介绍如何在 CentOS 8 上设置
  • 在 Debian 10 Linux 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费 自动化 开放的证书颁发机构 提供免费的 SSL 证书 Let s Encrypt 颁发的证书受到所有主要浏览器的信任 并且自颁发之日起 90 天内有效 本教程展示了如