如何在 OpenSUSE 15.4/15.5 上使用 Let's Encrypt 保护 Nginx
教程要求 | |
---|---|
要求 | 带有 Nginx 的 OpenSUSE Linux 15.4/15.5 |
Root 权限 | 是的 |
难度等级 | 中间的 |
类别 | 让我们加密 |
操作系统兼容性 | openSUSE • SUSE |
预计阅读时间 | 5 分钟 |
如何在 OpenSUSE Linux 上使用 Let's Encrypt 保护 Nginx
获取 SSL/TLS 证书的流程如下:
- 获取 acme.sh 客户端,运行:
git clone https://github.com/Neilpang/acme.sh.git - 安装:
./acme.sh --install --accountemail you@your-tld - 将默认 CA 设置为 letsencrypt:
./acme.sh --set-default-ca --server letsencrypt - 为您的域创建 nginx 配置:
vi /etc/nginx/vhosts.d/your-domain-name.conf - 获取您的域名的 SSL 证书:
acme.sh --issue -d your-domain-name --nginx - 在 Nginx 上配置 TLS:
vi /etc/nginx/conf.d/your-domain-name.conf - 设置 cron 作业以自动更新 TLS 证书
- 使用firewalld 打开端口 443 (HTTPS):
sudo firewall-cmd --add-service=https
让我们详细了解所有步骤。
步骤 1 – 安装所需软件(先决条件)
打开终端,然后输入以下命令。确保使用 CLI 更新 OpenSUSE Linux 软件和内核,如下所示:
我们的 acme.sh 客户端需要 curl、wc 和其他软件包。因此,我们必须使用 zypper 命令安装所需的软件:
$ sudo zypper ref
$ sudo zypper up
$ sudo zypper install wget curl bc git socat cronie
在 OpenSUSE Linux 上安装 Nginx
再次使用 zypper:
$ sudo zypper install nginx
$ sudo systemctl enable nginx.service
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
启动 Nginx 服务器并使用 systemctl 命令进行验证:
这是我看到的:
$ sudo systemctl start nginx.service
$ sudo systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-07-06 18:49:32 UTC; 2min 4s ago Main PID: 13990 (nginx) Tasks: 2 CGroup: /system.slice/nginx.service ├─13990 nginx: master process /usr/sbin/nginx -g daemon off; └─13991 nginx: worker process Jul 06 18:49:32 opensuse-example-42 systemd[1]: Starting The nginx HTTP and reverse proxy server... Jul 06 18:49:32 opensuse-example-42 nginx[13989]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Jul 06 18:49:32 opensuse-example-42 nginx[13989]: nginx: configuration file /etc/nginx/nginx.conf test is successful Jul 06 18:49:32 opensuse-example-42 systemd[1]: Started The nginx HTTP and reverse proxy server.
最后在 OpenSUSE Linux 上使用 firewllad 打开 HTTP 端口 80
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=http --permanent
$ sudo firewall-cmd --list-services
ssh dhcpv6-client http
第 2 步 - 安装 acme.sh Let's Encrypt 客户端
我们必须克隆acme.sh repo:
安装客户端,但首先使用 su 命令/sudo 命令以 root 用户身份登录:
要查看 acme.sh 版本,请运行:
$ cd /tmp/
$ git clone https://github.com/Neilpang/acme.sh.git
$ sudo -i
# touch /root/.bashrc
# cd /tmp/acme.sh/
# ./acme.sh --install --accountemail your-email-id@domain-here
# ./acme.sh --set-default-ca --server letsencrypt
# acme.sh --version
Outputs:
https://github.com/acmesh-official/acme.sh
v3.0.1
步骤 3 - OpenSUSE 上 http 服务器的基本 Nginx 配置
我将为名为 opensuse.example.com 的域名创建一个新的配置(请随意将 opensuse.example.com 替换为您的实际域名),如下所示:
# vi /etc/nginx/vhosts.d/opensuse.example.com.conf
附加以下指令:
# http port 80 config server { listen 80 default_server; # IPv4 listen [::]:80 default_server; # IPv6 server_name opensuse.example.com; # domain name access_log /var/log/nginx/http_opensuse.example.com_access.log; error_log /var/log/nginx/http_opensuse.example.com_error.log; root /srv/www/htdocs; }
保存并关闭文件。测试 nginx 设置并重新加载 nginx 服务器,如下所示:
# nginx -t && systemctl restart nginx.service
步骤 4 - 创建 dhparam.pem 文件
我们需要使用 openssl 命令创建如下 Diffie-Hellman 密钥交换文件:
# mkdir -pv /etc/nginx/ssl/example.com/
# cd /etc/nginx/ssl/example.com/
# openssl dhparam -out dhparams.pem -dsaparam 4096
# ls -l
步骤 5 – 获取域名证书
我们可以使用步骤 3 中配置的Nginx 服务器颁发证书。但是,如果您的服务器位于 Cloudflare 等反向代理 CDN 后面,请使用下面描述的独立模式。
使用预配置的 Nginx颁发证书
将域名设置为 $DOM shell 变量:
# DOM="opensuse.example.com"
# D="/srv/www/htdocs"
# mkdir -pv ${D}/.well-known/acme-challenge/
# acme.sh --webroot "${D}" --issue -d "$DOM" --ocsp-must-staple --keylength 4096
## GET ecc cert too. Only ec-384 or ec-256 ##
# acme.sh --webroot "${D}" --issue -d "$DOM" --ocsp-must-staple --keylength ec-384
以独立模式颁发证书
# DOM="opnesuse.example.com"
# acme.sh --issue --standalone -d "$DOM" --ocsp-must-staple --keylength 4096
## GET ecc cert too. Only ec-384 or ec-256 ##
# acme.sh --issue --standalone -d "$DOM" --ocsp-must-staple --keylength ec-384
在哪里,
- --webroot /srv/www/htdocs:指定 Web 根模式的 Web 根文件夹。您必须在根目录中创建 /.well-known/acme-challenge/。
- --issue:颁发证书。
- -d domain-name:指定一个域,用于颁发、续订或撤销。我们可以多次使用它。例如:acme.sh --issue -d www.example.com -d ftp.cybercit.biz --ocsp-must-staple --keylength 4096
- --ocsp-must-staple:生成ocsp必须Staple扩展
- --keylength 4096:指定域密钥长度:2048、3072、4096、8192或ec-256、ec-384、ec-521。
- --keylength ec-256:椭圆曲线密码术 (ECC)是一种基于有限域上椭圆曲线代数结构的公钥密码术。与非 EC 密码术(基于普通伽罗瓦域)相比,ECC 允许使用较小的密钥来提供同等的安全性。
第 6 步 - 在 OpenSUSE Linux 服务器上配置 Nginx
编辑配置文件:
# vi /etc/nginx/vhosts.d/opensuse.example.com.conf
更新如下:
# http port 80 config server { listen 80 default_server; # IPv4 listen [::]:80 default_server; # IPv6 server_name opensuse.example.com; access_log off; error_log off; root /srv/www/htdocs; return 301 https://$host$request_uri; } # https port 443 config server { listen 443 ssl http2; # IPv4 listen [::]:443 ssl http2; # HTTP/2 TLS IPv6 server_name opensuse.example.com; # domain name # Set document root location / { root /srv/www/htdocs; index index.html index.htm; } # Set access and error log for this vhos access_log /var/log/nginx/https.opensuse.example.com_access.log; error_log /var/log/nginx/https.opensuse.example.com_error.log; # TLS/SSL CONFIG ssl_certificate /etc/nginx/ssl/example.com/opensuse.example.com.fullchain.cer; ssl_certificate_key /etc/nginx/ssl/example.com/opensuse.example.com.key; # ECC certificates ssl_certificate /etc/nginx/ssl/example.com/opensuse.example.com.fullchain.cer.ecc; ssl_certificate_key /etc/nginx/ssl/example.com/opensuse.example.com.key.ecc; ssl_dhparam /etc/nginx/ssl/example.com/dhparams.pem; # A little bit of optimization ssl_session_timeout 1d; ssl_session_cache shared:exampleSSL:10m; # about 40000 sessions ssl_session_tickets off; # TLS version 1.2 and 1.3 only 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; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Xss-Protection "1; mode=block" always; add_header Referrer-Policy strict-origin-when-cross-origin always; add_header Feature-policy "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" always; # WARNING: The HTTP Content-Security-Policy response header allows sysadmin/developers # to control resources the user agent is allowed to load for a given page. # Wrong config can create problems for third party scripts/ad networks. Hence read the following url: # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy add_header content-security-policy "default-src https://opensuse.example.com:443" always; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; # Verify chain of trust of OCSP response using Root CA and Intermediate certs ssl_trusted_certificate /etc/nginx/ssl/example.com/opensuse.example.com.fullchain.cer; # Replace with the IP address of your resolver resolver 1.1.1.1; }
示例 index.html
创建一个新文件如下:
# vi /srv/www/htdocs/index.html
附加以下代码:
<!doctype html> <html lang="en"> <head> <title>OpenSUSE.example.com Nginx server</title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <article> <h2>Hello, World!</h2> <p>This is a test server powerd by OpenSUSE Linux 15.2 and Nginx with free TLS certficate.</p> <hr> <small> Email us <a href="mailto:webmaster@example.com">webmaster@example.com</a>. </small> </body> </html>
第 7 步 - 在 OpenSUSE 15.4 / 15.5 上安装 Let's Encrypt TLS 证书
将颁发的证书安装到 nginx 服务器并重新加载服务器:
也安装 ECC 证书:
# DOM="opensuse.example.com"
# acme.sh -d "$DOM" \
--install-cert \
--reloadcmd "systemctl reload nginx" \
--fullchain-file "/etc/nginx/ssl/example.com/$DOM.fullchain.cer" \
--key-file "/etc/nginx/ssl/example.com/$DOM.key" \
--cert-file "/etc/nginx/ssl/example.com/$DOM.cer"
# acme.sh -d "$DOM" \
--ecc \
--install-cert \
--reloadcmd "systemctl reload nginx" \
--fullchain-file "/etc/nginx/ssl/example.com/$DOM.fullchain.cer.ecc" \
--key-file "/etc/nginx/ssl/example.com/$DOM.key.ecc" \
--cert-file "/etc/nginx/ssl/example.com/$DOM.cer.ecc"
步骤 8 – 打开 TCP 端口 443 [HTTPS 端口]
现在是时候在 OpenSUSE Linux 上使用 firewllad 打开 HTTPS TCP 端口 443 了,如下所示:
# firewall-cmd --zone=public --add-service=https
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --list-services
# curl -I https://opensuse.example.com/
步骤 9 – 测试
SSL 实验室测试:
安全标头测试:
启动 Web 浏览器并输入您的域名,例如:
https://opensuse.example.com
步骤 10 - 基本 acme.sh 命令
我们可以列出所有证书,运行:
# acme.sh --list
Main_Domain KeyLength SAN_Domains Created Renew opensuse.example.com "4096" no Mon Jul 6 19:07:07 UTC 2020 Fri Sep 4 19:07:07 UTC 2020 opensuse.example.com "ec-384" no Mon Jul 6 19:11:54 UTC 2020 Fri Sep 4 19:11:54 UTC 2020
为名为 opensuse.example.com 的域名续订证书
请注意,cron 作业也会尝试为您续订证书。默认情况下,它按如下方式安装(您无需采取任何措施)。要查看cron 作业,请运行:
# acme.sh --renew -d opensuse.example.com
# acme.sh --force --renew -d opensuse.example.com -d www.example.com
# crontab -l
28 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
要升级 acme.sh 客户端,请执行:
# acme.sh --upgrade
输出:
[Thursday 15 June 2023 06:40:57 PM UTC] Installing from online archive. [Thursday 15 June 2023 06:40:57 PM UTC] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz [Thursday 15 June 2023 06:40:58 PM UTC] Extracting master.tar.gz [Thursday 15 June 2023 06:40:58 PM UTC] Installing to /root/.acme.sh [Thursday 15 June 2023 06:40:58 PM UTC] Installed to /root/.acme.sh/acme.sh [Thursday 15 June 2023 06:40:58 PM UTC] Good, bash is found, so change the shebang to use bash as preferred. [Thursday 15 June 2023 06:40:59 PM UTC] OK [Thursday 15 June 2023 06:40:59 PM UTC] Install success! [Thursday 15 June 2023 06:41:05 PM UTC] Upgrade success!
再次验证版本:
# acme.sh --version
输出:
https://github.com/acmesh-official/acme.sh v3.0.6
获取帮助很容易。使用 more 命令或 less 命令分页器运行,一次查看一个屏幕:
# acme.sh --help | more
或者您也可以使用grep 命令或egrep 命令
# acme.sh --help | more
来筛选帮助。例如:
或者
# acme.sh --help | grep -w -- 'version'
# acme.sh --help | grep -wE -- '--(version|upgrade)'
结论
我们将解释如何在基于 OpenSUSE Linux 15.4/15.5 nginx 的服务器上使用 OCSP Stapling 和 ECC 证书安装和设置 Let's Encrypt TLS/SSL 证书。有关更多信息,请参阅此处的 acme.sh 项目主页。
- 在 OpenSUSE Linux Enterprise Server 上安装和使用 Nginx
- 在 OpenSUSE Linux 上使用 Let's Encrypt 保护 Nginx
- 在 OpenSUSE Linux 15.2/15.1 上安装 PHP
- 在 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 电子邮件通知