在Ubuntu 19.04上的Nginx中从Lets Encrypt安装通配符证书

在2018年3月,我们加密添加了对通配符证书的支持。通配符证书使您可以使用单个证书来保护域的所有第一级子域。通配符证书只能通过ACMEv2获得,它是ACME协议的更新版本。要将ACMEv2用于通配符或非通配符证书,您需要一个已更新以支持ACMEv2的客户端。一个这样的客户端是acme.sh,它是一个ACME / ACMEv2协议客户端,完全用Shell(Unix外壳)语言编写,没有任何依赖关系。此外,必须使用DNS-01质询类型来验证通配符域。这意味着您需要修改DNS TXT记录以证明对域的控制权以获得通配符证书。

在本指南中,我们将说明如何使用acme.sh客户端,Lexicon工具通过使用Vultr API自动处理DNS记录的Lexicon工具,从Ubuntu 19.04上的Let's Encrypt获取和部署免费通配符证书,以及如何将证书部署到Nginx Web服务器。

要求

  • 新部署的Ubuntu 19.04 Vultr云服务器。
  • 您有一个注册域名。本指南以example.com域为例。
  • 确保已为完全限定域名(FQDN)设置了A / AAAA和CNAME DNS记录。如果您需要熟悉DNS概念,则不妨参考Vultr DNS入门指南
  • 在Vultr帐户控制面板中启用了Vultr API访问。

在你开始之前

检查Ubuntu版本。

lsb_release -ds
# Ubuntu 19.04

创建一个具有sudo访问权限和首选用户名的新用户帐户,然后切换到该帐户。我们使用johndoe

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe

注意用您的用户名替换johndoe

设置时区。

sudo dpkg-reconfigure tzdata

确保您的Ubuntu系统是最新的。

sudo apt update && sudo apt upgrade -y

安装必要的软件包。

sudo apt install -y git wget curl socat

安装Nginx

安装Nginx Web服务器。

sudo apt install -y nginx

检查版本。

sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)

安装Python和Lexicon

在使用acme.sh和Vultr API从Let's Encrypt获取通配符证书的过程中,第一步是需要安装PythonLexicon。Lexicon是一个Python软件包,它提供了一种以标准化方式处理多个DNS提供程序上的DNS记录的方法。

如果尚未在系统上安装Python,请安装。

sudo apt install -y python3

通过验证版本来确认安装。

python3 --version
# Python 3.7.3

安装Lexicon工具。词典是一个Python工具,可让您以标准化方式在各种DNS提供程序上处理DNS记录。

sudo apt install -y lexicon

检查词典版本。

lexicon --version
# lexicon 3.0.8

安装acme.sh客户端

Acme.sh是纯粹用Shell(Unix Shell)语言编写的ACME协议客户端,可自动通过Let's Encrypt获得签名证书的过程。它支持ACME v1和ACME v2,最重要的是,它支持ACME v2通配符证书。在本节中,我们将安装Acme.sh脚本。

注意: 建议使用root用户来安装acme.sh,尽管它不需要root/ sudo访问。

root如果已创建,请从常规用户切换到用户。

sudo su - root

下载并安装acme.sh

git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "[email protected]"
source ~/.bashrc
cd

检查版本。

acme.sh --version
# v2.8.2

从“让我们加密”获取通配符证书

要获得通配符证书,我们只能使用DNS验证方法。我们使用Lexicon和Vultr DNS API来操纵TXT DNS记录。

获取您的域的RSA和ECC通配符证书。

# Configure your API key and username
export PROVIDER=vultr
export LEXICON_VULTR_USERNAME="[email protected]"
export LEXICON_VULTR_TOKEN="XXXXXXXXXXXXXXX"

# RSA 2048
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength 2048
# ECC 256
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength ec-256

注意不要忘记example.com用您的域名替换,并用您自己的Vultr API占位符值替换。

运行上述命令后,您的证书和密钥位于:

  • 对于RSA:~/.acme.sh/example.com目录。
  • 对于ECC / ECDSA:~/.acme.sh/example.com_ecc目录。

注意请勿使用文件~/.acme.sh/夹中的证书文件,这些文件仅供内部使用,将来目录结构可能会更改。

要列出您的证书,可以运行:

acme.sh --list

创建一个文件夹以在生产中存储您的证书。我们使用/etc/letsencrypt目录。

sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc

在服务器上安装/复制用于生产的证书。

# RSA
acme.sh --install-cert -d example.com \
        --cert-file /etc/letsencrypt/example.com/cert.pem \
        --key-file /etc/letsencrypt/example.com/private.key \
        --fullchain-file /etc/letsencrypt/example.com/fullchain.pem \
        --reloadcmd "sudo systemctl reload nginx.service"

# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc \
        --cert-file /etc/letsencrypt/example.com_ecc/cert.pem \
        --key-file /etc/letsencrypt/example.com_ecc/private.key \
        --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem \
        --reloadcmd "sudo systemctl reload nginx.service"

现在我们已经从Let's Encrypt成功获取了通配符证书,我们需要配置Nginx Web服务器。所有证书每60天自动更新一次。

获取证书并将其安装到您的首选位置后,您可以从root用户注销为普通sudo用户,并sudo根据需要使用继续管理服务器。

exit

配置Nginx Web服务器

运行sudo vim /etc/nginx/sites-available/example.com.conf并使用以下内容填充文件。example.com用您自己的域名替换所有出现的域名。

server {

  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com *.example.com;
  root /var/www/example.com;

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com/private.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;

}

example.com.conf通过将文件链接到sites-enabled目录来激活新配置。

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

测试Nginx配置。

sudo nginx -t

重新加载Nginx。

sudo systemctl reload nginx.service

而已。我们使用acme.sh,Lexicon和Vultr API将通配符证书部署到Nginx。当您要保护动态生成的多个第一级子域时,通配符证书会很有用。



Leave a Comment

如何在CentOS 7上使用Mosh进行远程服务器管理

如何在CentOS 7上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

安装和设置CentOS 7以使用SSH远程解锁LUKS磁盘加密上的LVM

安装和设置CentOS 7以使用SSH远程解锁LUKS磁盘加密上的LVM

LUKS(Linux统一密钥设置)是与平台无关的Linux可用的各种磁盘加密格式之一。本教程将为您提供机智

如何在CoreOS上更改SSH端口

如何在CoreOS上更改SSH端口

更改SSH端口可以帮助防止安全问题。在本指南中,您将学习如何在CoreOS上更改SSH端口。步骤1:更改SSH端口

在CentOS 6上使用ModSecurity设置NGINX

在CentOS 6上使用ModSecurity设置NGINX

在本文中,我将解释如何构建受ModSecurity保护的LEMP堆栈。ModSecurity是一种开源Web应用程序防火墙,对

如何在FreeBSD 12的Nginx中启用TLS 1.3

如何在FreeBSD 12的Nginx中启用TLS 1.3

使用其他系统?TLS 1.3是传输层安全性(TLS)协议的版本,该协议于2018年作为RFC 8446中的建议标准发布

如何在Debian 9的Nginx中启用TLS 1.3

如何在Debian 9的Nginx中启用TLS 1.3

使用其他系统?简介TLS 1.3是传输层安全性(TLS)协议的版本,该协议于2018年作为RF中的拟议标准发布

如何在FreeBSD 12的Apache中启用TLS 1.3

如何在FreeBSD 12的Apache中启用TLS 1.3

使用其他系统?TLS 1.3是传输层安全性(TLS)协议的版本,该协议于2018年作为RFC 8446中的建议标准发布

如何使用SSL / TLS保护vsFTPd

如何使用SSL / TLS保护vsFTPd

非常安全的FTP守护程序,或简称为vsFTPd,是一款轻量级的软件,具有强大的自定义功能。在本教程中,我们将确保已

从CentOS的Logjam攻击中保护NGINX的安全

从CentOS的Logjam攻击中保护NGINX的安全

好吧,还有另外一个SSL漏洞正在肆虐。从技术上讲,它并不是真正的漏洞,它只是我们所依赖的协议内部的一个漏洞

使用两因素身份验证登录到Vultr控制面板

使用两因素身份验证登录到Vultr控制面板

两因素身份验证(2FA)是一种技术,它通过要求额外的身份验证步骤才能登录,从而增加了一层安全保护。

在Ubuntu 14.04上配置简单的防火墙(UFW)

在Ubuntu 14.04上配置简单的防火墙(UFW)

当您运行自己的服务器时,安全性至关重要。您要确保只有授权用户才能访问您的服务器,配置和服务。一世

如何在CentOS上使用Mosh进行远程服务器管理

如何在CentOS上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

在Ubuntu 16.04 LTS上使用鳄梨调味酱创建HTML 5 RDP / SSH前端

在Ubuntu 16.04 LTS上使用鳄梨调味酱创建HTML 5 RDP / SSH前端

简介本教程的目的是摆脱公共SSH和公共RDP连接。通过将所有这些都放置在非常方便的HTML5客户端后面

在Debian上敲端口

在Debian上敲端口

使用其他系统?现在,您可能已经更改了默认的SSH端口。尽管如此,黑客仍可以轻松扫描端口范围以发现该端口-但机智

更改SSH端口以获得CentOS 6或7的额外安全性

更改SSH端口以获得CentOS 6或7的额外安全性

现在,每个人似乎都使用臭名昭著的端口22通过SSH连接到其服务器。我认为,这只是使操作更轻松的另一种方法

在Linux上安装LetsEncrypt

在Linux上安装LetsEncrypt

LetsEncrypt是具有自动客户端的证书颁发机构。简而言之,这意味着您可以免费保护网站。没错,您可以

如何在Fedora 30上的Apache中启用TLS 1.3

如何在Fedora 30上的Apache中启用TLS 1.3

使用其他系统?TLS 1.3是传输层安全性(TLS)协议的版本,该协议于2018年作为RFC 8446中的建议标准发布

如何在CentOS 7上禁用SELinux

如何在CentOS 7上禁用SELinux

SELinux是Security-Enhanced Linux的缩写,是Linux操作系统的安全性增强。它是一个标签系统,可阻止许多系统

保护CentOS 6上的Apache服务器

保护CentOS 6上的Apache服务器

保护服务器安全时很容易采取捷径,但是如果攻击者获得对任何服务器的根访问权限,则可能会丢失数据。前夕

如何在CentOS 7,Debian 8和Ubuntu 16.04上为Nginx安装ModSecurity

如何在CentOS 7,Debian 8和Ubuntu 16.04上为Nginx安装ModSecurity

ModSecurity是一个开放源代码Web应用程序防火墙(WAF)模块,非常适合保护Apache,Nginx和IIS免受各种网络攻击

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。