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

2023-10-16

Let’s Encrypt 是由互联网安全研究小组 (ISRG) 开发的免费开放的证书颁发机构。如今,Let’s Encrypt 颁发的证书几乎受到所有浏览器的信任。

在本教程中,我们将解释如何使用 Certbot 工具为 Debian 9 上的 Nginx 获取免费的 SSL 证书。我们还将展示如何配置 Nginx 以使用 SSL 证书并启用 HTTP/2。

先决条件#

在继续本教程之前,请确保满足以下先决条件:

  • 以用户身份登录须藤权限 .
  • 有一个域名指向您的公共服务器IP。我们将使用example.com.
  • 通过以下方式安装Nginx这些说明
  • 您有一个适合您的域的服务器块。您可以关注这些说明有关如何创建一个的详细信息。

安装证书机器人#

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:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

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=15768000; includeSubdomains; preload";
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

您现在可以使用 webroot 插件运行 Certbot 并通过发出以下命令来获取 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 2018-07-28. 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"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

接下来,编辑域服务器块,如下所示:

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
}

通过上面的配置我们强制使用 HTTPS并从 www 版本重定向到非 www 版本。

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

sudo systemctl reload nginx

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

Let’s Encrypt 的证书有效期为 90 天。为了在证书过期之前自动续订证书,certbot 包创建了一个每天运行两次的 cronjob,并在证书到期前 30 天自动续订任何证书。

由于我们在更新证书后使用 certbot webroot 插件,因此我们还必须重新加载 nginx 服务。附加--renew-hook "systemctl reload nginx" to the /etc/cron.d/certbot文件,如下所示:

sudo nano /etc/cron.d/certbot
/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

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

sudo certbot renew --dry-run

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

结论#

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

在本教程中,您使用 Let’s Encrypt 客户端 certbot 为您的域生成 SSL 证书。您还创建了 Nginx 片段以避免重复代码,并将 Nginx 配置为使用证书。在本教程结束时,您已经设置了一个用于自动证书续订的 cronjob。

如果您想了解有关如何使用 Certbot 的更多信息,他们的文档是一个很好的起点。

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

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

随机推荐

  • Git 提示:签出远程分支

    Git 是一种流行的分布式版本控制系统 广泛用于软件开发和其他协作项目 Git 的主要功能之一是它能够使用远程存储库 允许您共享代码并与其他人就您的项目进行协作 在本文中 我们将讨论如何在 Git 中列出和签出远程分支 1 列出远程分支 要
  • 如何删除 CloudFront 缓存

    CloudFront 是 Amazon Web Services 提供的一项流行的缓存和内容交付网络服务 它通过其全球数据中心向用户提供数据 CloudFront 还在其服务器上创建本地内容缓存 进一步用于快速满足用户请求 失效允许我们在对
  • 通过 SQL 或 phpMyAdmin 重置 SugarCRM 管理员密码

    问题 如何通过 SQL 查询重置 SugarCRM 管理员密码 如何使用 phpMyAdmin 重置 SugarCRM 管理员密码 如何使用 SQL 查询重置 SugarCRM 忘记的密码 如何找到 SugarCRM 默认管理员密码 如果您
  • MySQL 数据库备份 RPM

    几个月前我创建了这个 rpm 现在它可供所有用户使用 这个 rpm 有一个简单的 shell 脚本用于 mysql 数据库备份 特征 在本地进行数据库备份 将备份上传到 ftp 服务器 备份完成后发送电子邮件警报 安装 直接使用命令行或使用
  • JavaScript 中删除字符串最后一个字符的 2 种方法

    问题 如何从 JavaScript 或 Node js 脚本中的字符串中删除最后一个字符 本教程介绍了使用 JavaScript 编程语言从字符串中删除最后一个字符的 2 种方法 您可以根据需要使用以下任意一种方法 方法 1 使用 subs
  • 如何在 Ubuntu 22.04 上安装 Docker

    Docker 通过启用轻量级容器化技术彻底改变了开发人员创建 部署和管理应用程序的方式 该技术允许轻松管理和隔离应用程序及其依赖项 在本教程中 我们将指导您完成在 Ubuntu 22 04 上安装 Docker 的过程 Ubuntu 22
  • 在 cPanel 帐户中启用 Apache Gzip 压缩 (mod_deflate)

    Apache mod deflate模块用于在向客户端提供服务之前压缩内容 仅当您的托管提供商在 Apache 中启用了 mod deflate 模块时 您才可以配置压缩 WHM 管理员可以全局启用 Gzip对于所有使用 WHM 控制面板的
  • 适用于不同用例的十大 Linux 发行版

    Linux 是一种开源操作系统 可以根据用户的需求和偏好为用户提供多种选择 Linux 的优点在于它是高度可定制的 这意味着用户可以调整操作系统以满足他们的特定要求 然而 由于有如此多的 Linux 发行版可供选择 因此决定选择哪一个可能会
  • Apache 中的平滑重启是什么

    Apache HTTP Server 通常称为 Apache 是一种非常流行的开源 Web 服务器软件 在 Web 内容的交付中发挥着重要作用 Apache 非常灵活 允许使用多种关键功能和配置来帮助优化其性能 其中一项重要功能是 平滑重启
  • 如何在 Linux 中使用“find”命令删除 X 天之前修改的文件

    The find Linux 中的命令是一个功能强大的工具 可用于根据各种条件 例如名称 类型 大小和时间戳 搜索文件 查找 命令的一个常见用例是删除超过一定天数的文件 这对于清理旧备份 日志文件或不再需要的其他类型的文件非常有用 在本文中
  • 如何在 CentOS 8 上安装 Anaconda

    Anaconda 是最流行的 Python R 数据科学和机器学习平台 它用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带 1 500 多个开源数据包 它还包括conda命令行工具和称为 Anaconda Navigat
  • 如何在 Ubuntu 18.04 上安装 Magento 2

    Magento是基于开源技术构建的领先企业级电子商务平台 将强大的功能与灵活性和用户友好的界面相结合 凭借引人入胜的购物体验 灵活的模块化架构以及企业级可扩展性和性能等功能 Magento 是大多数在线商家的首选平台 在本教程中 我们将向您
  • 如何在 Ubuntu 20.04 上安装 Skype

    Skype是世界上最流行的通信应用程序之一 它是跨平台的 可在 Windows Linux 和 macOS 上使用 通过 Skype 您可以免费进行在线音频和视频通话 以及拨打世界各地的手机和固定电话的国际电话 Skype 不是开源应用程序
  • 如何使用 .htaccess 强制使用 HTTPS

    如果您为域安装了 SSL 证书 则下一步应该是将应用程序配置为通过 HTTPS 提供所有 Web 流量 与以明文形式发送和返回请求和响应的 HTTP 不同 HTTPS 使用 TLS SSL 来加密客户端和服务器之间的通信 相对于 HTTP
  • 如何在 CentOS 8 上安装和配置 NFS 服务器

    网络文件系统 NFS 是一种分布式文件系统协议 允许您通过网络共享远程目录 使用 NFS 您可以在系统上挂载远程目录并像使用本地文件一样使用远程计算机上的文件 NFS 协议默认不加密 并且与 Samba 不同 它不提供用户身份验证 对服务器
  • 如何检查 Bash 中文件或目录是否存在

    很多时候 在编写 Shell 脚本时 您可能会发现自己处于需要根据文件是否存在来执行操作的情况 在Bash中 可以使用test命令来检查文件是否存在并判断文件的类型 测试命令采用以下语法形式之一 test EXPRESSION EXPRES
  • 如何在 Python 中分割字符串

    使用字符串时 日常操作之一是使用给定的分隔符将字符串拆分为子字符串数组 在这篇文章中 我们将讨论如何在Python中分割字符串 split 方法 在Python中 字符串被表示为不可变的str对象 这str类附带了许多字符串方法 允许您操作
  • 如何在 Ubuntu 18.04 上安装和配置 Samba

    Samba 是一个免费且开源的重新实现SMB CIFS网络文件共享协议那 允许最终用户访问文件 打印机和其他共享资源 本教程介绍如何在 Ubuntu 18 04 上安装 Samba 并将其配置为独立服务器 以通过网络在不同操作系统之间提供文
  • 如何在 CentOS 7 上安装和使用 Docker Compose

    Docker 组合是一个允许您定义和运行多容器 Docker 应用程序的工具 使用 Compose 您可以在单个 YAML 文件中定义应用程序的服务 网络和卷 然后使用单个命令启动您的应用程序 Compose 可用于不同的目的 例如单主机应
  • 在 Debian 9 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费开放的证书颁发机构 如今 Let s Encrypt 颁发的证书几乎受到所有浏览器的信任 在本教程中 我们将解释如何使用 Certbot 工具为 Debian 9 上的