如何在 CentOS 8 上使用 Let's Encrypt 配置 Nginx
Let's Encrypt 是免费、自动化且开放的证书颁发机构,适用于您的网站、电子邮件服务器等。本页介绍如何使用 Let's Encrypt 在 CentOS 8 上为 Nginx Web 服务器安装证书,获得 SSL 实验室 A+ 分数。
如何在 CentOS 8 上使用 Let's Encrypt 保护 Nginx
获取SSL证书的流程如下:
- 获取 acme.sh 软件:
git clone https://github.com/Neilpang/acme.sh.git - 为您的域创建 nginx 配置:
vi /etc/nginx/conf.d/your-domain-name.conf - 获取您的域名的 SSL 证书:
acme.sh --issue -d your-domain-name --nginx - 在 Nginx 上配置 TLS/SSL:
vi /etc/nginx/conf.d/your-domain-name.conf - 设置 cron 作业以进行自动更新
- 在 CentOS 8 上使用 Firwalld 打开端口 443(HTTPS):
sudo firewall-cmd --add-service=https
让我们看看如何安装acme.sh 客户端并在 CentOS 8 上使用它从 Let's Encrypt 获取 SSL 证书。
步骤 1 – 安装所需软件
使用yum 命令安装 git、wget、curl 和 bc 包:
sudo yum install git bc wget curl socat
第 2 步 - 安装 acme.sh Let's Encrypt 客户端
克隆 repo:
将 acme.sh 客户端安装到您的系统上,运行:
安装后,您必须关闭当前终端并重新打开以使别名生效。或者只需输入以下源命令:
通过打印版本号来验证安装:
cd /tmp/
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh/
sudo -i ## be root user ##
./acme.sh --install
sudo source ~/.bashrc
acme.sh --version
https://github.com/Neilpang/acme.sh
v2.8.4
步骤 3 – http 服务器的基本 nginx 配置
我将为名为 c8nginx.example.com 的域名创建一个新的配置(请随意将 c8nginx.example.com 替换为您的实际域名),如下所示:
# vi /etc/nginx/conf.d/c8nginx.example.com.conf
附加以下代码:
# http port 80 server { listen 80; server_name c8nginx.example.com; access_log /var/log/nginx/http_c8nginx.example.com_access.log; error_log /var/log/nginx/http_c8nginx.example.com_error.log; root /usr/share/nginx/html; }
保存并关闭文件。测试nginx 设置并重新加载 nginx 服务器,如下所示:
# nginx -t
# systemctl restart nginx.service
步骤 4 - 创建 dhparams.pem 文件
运行 openssl 命令,但使用mkdir 命令创建一个新目录:有关更多信息,
请参阅“如何加速 Linux 上的 OpenSSL/GnuPG 熵以生成随机数”。
# mkdir -pv /etc/nginx/ssl/example.com/
# cd /etc/nginx/ssl/example.com/
# openssl dhparam -out dhparams.pem -dsaparam 4096
步骤 5 – 获取域名证书
为您的域名颁发证书:
sudo acme.sh --issue -d c8nginx.example.com -k 2048 --nginx
## for two domains ##
sudo acme.sh --issue -d c8nginx.example.com -d www.example.com -k 2048 --nginx
## get certs for three domains ##
sudo acme.sh --issue -d example.com -d c8nginx.example.com -d www.example.com -k 2048 --nginx
## let us get cert for c8nginx.example.com domain only ##
sudo acme.sh --issue -d c8nginx.example.com -k 4096 --nginx
第 6 步 - 配置 Nginx
您刚刚成功从 Let's Encrypt 为您的 CentOS 8 Linux 服务器申请了 SSL 证书。现在是时候配置它了。更新 ssl 配置如下:
$ sudo vi /etc/nginx/conf.d/c8nginx.example.com.conf
附加以下配置:
## http port 80: START http://c8nginx.example.com/ config ## server { listen 80; listen [::]:80; access_log /var/log/nginx/http_c8nginx.example.com_access.log; error_log /var/log/nginx/http_c8nginx.example.com_error.log; server_name c8nginx.example.com; root /usr/share/nginx/html; # # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. # return 301 https://$host$request_uri; } ## https port 443: START https://c8nginx.example.com/ config ## server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name c8nginx.example.com; root /usr/share/nginx/html; # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate ssl_certificate /etc/nginx/ssl/example.com/c8nginx.example.com.cer; ssl_certificate_key /etc/nginx/ssl/example.com/c8nginx.example.com.key; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions ssl_session_tickets off; ssl_dhparam /etc/nginx/ssl/example.com/dhparams.pem; # # Supports Firefox 27, Android 4.4.2, Chrome 31, Edge, IE 11 on Windows 7, Java 8u31, OpenSSL 1.0.1, Opera 20, and Safari 9 and above # 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; # HSTS (ngx_http_headers_module is required) (63072000 seconds) add_header Strict-Transport-Security "max-age=63072000" always; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; # replace with the IP address of your resolver resolver 8.8.8.8; ## add other config below such as fastcgi or php and so on ## }
在 vi /vim 文本编辑器中保存并关闭文件。
步骤 7 – 安装证书
将颁发的证书安装到 nginx 服务器:
使用 ss 命令或 netstat 命令确保端口 os 打开:
# acme.sh --installcert -d c8nginx.example.com \
--key-file /etc/nginx/ssl/example.com/c8nginx.example.com.key \
--fullchain-file /etc/nginx/ssl/example.com/c8nginx.example.com.cer \
--reloadcmd 'systemctl reload nginx.service'
# ss -tulpn
步骤 7 - 防火墙配置
您需要在服务器上打开端口 443(HTTPS),以便客户端可以使用 Firewalld 连接它。更新规则如下:
$ sudo firewall-cmd --add-service=https
$ sudo firewall-cmd --runtime-to-permanent
步骤 8 – 测试
启动 Web 浏览器并输入您的域名,例如:
https://c8nginx.example.com
使用 SSLlabs 测试站点进行测试:
https://www.ssllabs.com/ssltest/analyze.html?d=c8nginx.example.com
步骤 9 - acme.sh 命令
列出所有证书:
# acme.sh --list
示例输出:
Main_Domain KeyLength SAN_Domains Created Renew c8nginx.example.com "4096" no Mon Dec 30 16:57:10 UTC 2019 Fri Feb 28 16:57:10 UTC 2020
为名为 c8nginx.example.com 的域名续订证书:
# acme.sh --renew -d c8nginx.example.com
请注意,cron 作业也会尝试为您续订证书。默认情况下,安装如下(您无需采取任何措施)。要查看作业运行:
# crontab -l
示例输出:
8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
升级 acme.sh 客户端:
# acme.sh --upgrade
获取帮助:
# acme.sh --help | more
- CentOS 8 上的 Nginx
- CentOS 8 上适用于 Nginx 的 PHP 7.x
- 在 CentOS 8 上为 Nginx 设置 Let's Encrypt
- 在 Debian/Ubuntu Linux 上设置 Lets Encrypt
- 在 Debian/Ubuntu 上使用 Lets Encrypt 证书保护Lighttpd
- 在Alpine Linux上使用 Lets Encrypt 证书配置Nginx
- CentOS 7上的Nginx与 Lets Encrypt
- RHEL 8上的Apache与 Lets Encrypt 证书
- CentOS 8和Apache与 Lets Encrypt 证书
- 在CentOS 8上为Nginx安装 Lets Encrypt 证书
- 强制续订 Let's Encrypt 证书
- OpenSUSE Linux和 Nginx 与 Let's Encrypt 证书
- 配置 Nginx 仅使用 TLS 1.2/1.3
- 使用 acme.sh 和Cloudflare DNS加密通配符证书
- 在 Ubuntu 18.04 上使用 Nginx 和 Let's Encrypt 进行 DNS 验证
- AWS Route 53使用 acme.sh 加密通配符证书
- 使用 acme.sh将 AWS Route 53转换为 Cloudflare Let's Encrypt DNS
- 当证书被跳过、续订或出现错误时,Let's Encrypt 电子邮件通知