点赞
评论
收藏
分享
举报
更新:为 NGINX 配置免费的 Let’s Encrypt SSL/TLS 证书
发表于2022-09-07 10:47

浏览 3k

原文作者:Amir Rawdat of F5
原文链接:更新:为 NGINX 配置免费的 Let’s Encrypt SSL/TLS 证书
转载来源:NGINX 官方网站


众所周知,网站的 SSL/TLS 加密会为您的用户带来更靠前的搜索排名和更出色的安全性。但目前有许多障碍阻碍了网站所有者采用 SSL。

其中两个最大障碍是证书获取成本高昂和所涉人工流程繁琐。而现在,有了 Let’s Encrypt,这些都不再是问题。Let’s Encrypt 支持所有人免费使用 SSL/TLS 加密。

Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构 (CA)。是的,没错Let’s Encrypt颁发的 SSL/TLS 证书是免费的。现今的大多数浏览器都信任 Let’s Encrypt 颁发的证书,包括旧版浏览器,例如 Windows XP SP3 上的 Internet Explorer。此外,Let’s Encrypt 实现了证书颁发和更新的全自动化。

NGINX 对于成为 Let’s Encrypt 的赞助者之一感到非常骄傲。

本文介绍了如何使用 Let’s Encrypt 客户端生成证书,以及如何自动配置 NGINX 开源版和 NGINX Plus 以使用这些证书。

Let’s Encrypt 的工作原理

在颁发证书之前,Let’s Encrypt 会验证域名的所有权。在您的主机上运行的 Let’s Encrypt 客户端将创建一个临时文件(一个令牌),其中包含所需的信息。然后,Let’s Encrypt 验证服务器会发出 HTTP 请求以检索文件并验证令牌,从而验证您域名的 DNS 记录是否解析到运行 Let’s Encrypt 客户端的服务器。

准备工作

在开始使用 Let’s Encrypt 之前,您需要:

  • 安装 NGINX 开源版或 NGINX Plus
  • 拥有或管理需安装证书的注册域名。如果没有注册域名,您可以在域名注册商处申请。
  • 创建一条 DNS 记录,将您的域名和服务器的公共 IP 地址关联。

现在您可以用NGINX 开源版或 NGINX Plus轻松设置 Let’s Encrypt (为了便于阅读,下文将统称为 NGINX)。

注:我们在 Ubuntu 16.04 (Xenial) 上测试了本文所述的程序。

1、下载 Let’s Encrypt 客户端

首先,下载 Let’s Encrypt 客户端 certbot

如上所述,我们在 Ubuntu 16.04 上测试了相关指令,以下是在该平台上运行的相应命令:

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx

用 Ubuntu 18.04和更高版本, 替代 Python 3版本:

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx


2、设置 NGINX

certbot 可以自动完成 NGINX 的 SSL/TLS 配置。它会在您的 NGINX 配置中查找并修改包含 server_name 指令(含有您为其请求证书的域名)的 server 块。在我们的示例中,域名为 www.example.com.

1.假设您在一个全新的 NGINX 安装上进行设置,请使用文本编辑器在 /etc/nginx/conf.d 目录中创建一个名为 domain‑name.conf 的文件(在我们的示例中为 www.example.com.conf)。

2.使用 server_name 指令指定您的域名(如果域名有变体的话也请指定):

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
}

3.保存文件,然后运行以下命令来验证配置的语法并重新启动 NGINX:

$ nginx -t && nginx -s reload


3、获取 SSL/TLS 证书

certbot 的 NGINX 插件负责重新配置 NGINX,并在必要时重新加载其配置。

1.运行以下命令,使用 NGINX 插件生成证书:

$ sudo certbot --nginx -d example.com -d www.example.com

2.根据 certbot 的提示配置 HTTPS 设置,包括输入您的电子邮件地址并同意 Let’s Encrypt 服务条款。

证书生成后,NGINX 重新加载新设置。certbot 生成一条消息,显示证书成功生成,并指示证书在服务器上的位置。

Congratulations! You have successfully enabled https://example.com and https://www.example.com 

-------------------------------------------------------------------------------------
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 2017-12-12.

注:Let’s Encrypt 证书在 90 天后到期(在本例中,到期时间为 2017 年 12 月 12 日)。有关自动更新证书的信息,请参阅下方“自动更新 Let’s Encrypt 证书”一节。

如果查看 domain‑name.conf,您会发现 certbot 已对其进行了修改:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}


4、自动更新 Let’s Encrypt 证书

Let’s Encrypt 证书将在 90 天后到期。我们建议您自动更新证书。此处,我们将一个 cron 作业添加到现有 crontab 文件中,以执行这一操作。

1.打开 crontab 文件。

$ crontab -e

2.添加 certbot 命令,并设置为每天运行。在本例中,我们每天中午运行该命令。该命令检查服务器上的证书是否会在未来 30 天内到期,如果是,则更新证书。—quiet 指令告知 certbot 不要生成输出。

0 12 * * * /usr/bin/certbot renew --quiet

3.保存并关闭文件。所有已安装的证书将自动更新和重新加载。

总结

以上,我们安装了 Let’s Encrypt 代理来为注册域名生成 SSL/TLS 证书,然后配置 NGINX 使用证书,并设置了自动更新证书。借助面向 NGINX 和 NGINX Plus 的 Let’s Encrypt 证书,您可以在几分钟内轻松搭建一个安全的网站。


更多资源

想要更及时全面地获取 NGINX 相关的技术干货、互动问答、系列课程、活动资源?

请前往 NGINX 开源社区:

已修改于2023-03-09 02:15
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
218
文章
21
问答
197
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 5.7k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 2.9k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 4.6k