如何在 CentOS 7 上使用 Let's Encrypt 配置 Nginx
Let's Encrypt 是免费、自动化且开放的证书颁发机构,适用于您的网站或任何其他项目。本页介绍如何使用 Let's Encrypt 为 Nginx Web 服务器安装免费 SSL 证书。您将学习如何在服务器上正确部署 Diffie-Hellman,以在 CentOS/RHEL 7 上获得 SSL 实验室 A+ 分数。
教程要求 | |
---|---|
要求 | CentOS 7 + 带有 mod_ssl 的 Apache |
Root 权限 | 是的 |
难度等级 | 中间的 |
预计阅读时间 | 5 分钟 |
如何在 CentOS 7 上使用 Let's Encrypt 保护 Nginx
我们的示例设置如下:
如何在 CentOS 7 上使用 Let's Encrypt 保护 Nginx
获取SSL证书的流程如下:
- 获取 acme.sh 软件:
git clone https://github.com/Neilpang/acme.sh.git - 创建 /.well-known/acme-challenge/ 目录:
mkdir -p /var/www/html/.well-known/acme-challenge/ - 获取您的域名的 SSL 证书:
acme.sh --issue -w /DocumentRootPath/ -d your-domain - 在 Nginx 上配置 TLS/SSL:
vi /etc/nginx/sites-available/default - 设置 cron 作业以进行自动更新
- 打开端口 443 (HTTPS):
sudo firewall-cmd --add-service=https
让我们看看如何安装acme.sh 客户端并在 CentOS/RHEL 7 上使用它从 Let's Encrypt 获取 SSL 证书。
步骤 1 – 安装所需软件
使用yum 命令安装 git、wget、curl 和 bc 包:
$ sudo yum install git bc wget curl
第 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
# ./acme.sh --install
$ sudo source ~/.bashrc
步骤 3 - 创建 acme-challenge 目录
键入以下mkdir 命令。确保根据需要将 D 设置为实际的 DocumentRoot 路径:
还要创建目录来存储 SSL 证书:
# D=/usr/share/nginx/html
# mkdir -vp ${D}/.well-known/acme-challenge/
###---[ NOTE: Adjust permission as per your setup ]---###
# chown -R nginx:nginx ${D}/.well-known/acme-challenge/
# chmod -R 0555 ${D}/.well-known/acme-challenge/
# mkdir -p /etc/nginx/ssl/example.com/
步骤 4 - 创建 dhparams.pem 文件
运行 openssl 命令:
# cd /etc/nginx/ssl/example.com/
# openssl dhparam -out dhparams.pem -dsaparam 4096
步骤 5 – 获取域名证书
为您的域名颁发证书:
acme.sh --issue -w /path/to/www/htmlRoot/ -d example.com -k 2048
sudo acme.sh --issue -w /usr/local/nginx/html -d server2.example.com -k 2048
第 6 步 - 配置 Nginx
您刚刚成功从 Let's Encrypt 为您的 CentOS 7 或 RHEL 7 服务器申请了 SSL 证书。现在是时候配置它了。编辑 default.ssl.conf:
$ sudo vi /etc/nginx/conf.d/default.ssl.conf
附加以下配置:
## START: SSL/HTTPS server2.example.com ### server { #------- Start SSL config with http2 support ----# listen 10.21.136.134:443 http2; server_name server2.example.com; ssl on; ssl_certificate /etc/nginx/ssl/example.com/server2.example.com.cer; ssl_certificate_key /etc/nginx/ssl/example.com/server2.example.com.key; ssl_session_timeout 30m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; ssl_session_cache shared:SSL:10m; ssl_dhparam /etc/nginx/ssl/example.com/dhparams.pem; ssl_prefer_server_ciphers on; ## Improves TTFB by using a smaller SSL buffer than the nginx default ssl_buffer_size 8k; ## Enables OCSP stapling ssl_stapling on; resolver 8.8.8.8; ssl_stapling_verify on; ## Send header to tell the browser to prefer https to http traffic add_header Strict-Transport-Security max-age=31536000; ## SSL logs ## access_log /var/log/nginx/ssl_access.log; error_log /var/log/nginx/ssl_error.log; #-------- END SSL config -------## # Add rest of your config below like document root, php and more ## location / { root /usr/share/nginx/html; index index.html index.htm; } # Allow php apps location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ## END SSL server2.example.com ######
在 vi /vim 文本编辑器中保存并关闭文件。
步骤 7 – 安装证书
将颁发的证书安装到 nginx 服务器:
使用 ss 命令或 netstat 命令确保端口 os 打开:
# acme.sh --installcert -d server2.example.com \
--keypath /etc/nginx/ssl/example.com/server2.example.com.key \
--fullchainpath /etc/nginx/ssl/example.com/server2.example.com.cer \
--reloadcmd 'systemctl reload nginx'
# ss -tulpn
步骤 8 - 防火墙配置
您需要在服务器上打开端口 443(HTTPS),以便客户端可以连接它。更新规则如下:
$ sudo firewall-cmd --add-service=https
$ sudo firewall-cmd --runtime-to-permanent
步骤 9 – 测试
启动 Web 浏览器并输入您的域名,例如:
https://server2.example.com
使用 SSLlabs 测试站点进行测试:
https://www.ssllabs.com/ssltest/analyze.html?d=server2.example.com
步骤 10 - acme.sh 命令
列出所有证书:
# acme.sh --list
为名为 server2.example.com 的域名续订证书
# acme.sh --renew -d server2.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 Linux 7 服务器上安装和设置 Let's Encrypt TLS/SSL 证书。有关更多信息,请参阅此处的 acme.sh 项目主页。
- 如何在 CentOS 7 / RHEL 7 上安装和使用 Nginx
- 如何在 CentOS 7/RHEL 7 上安装 PHP 7.2
- 如何在 CentOS 7 上使用 Let's Encrypt 配置 Nginx
- 在 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 电子邮件通知