MKTalkway
首页
注册

从Let's Encrypt为域名申请SSL/TLS证书实现HTTPS加密

MiKing233
好吃懶做
2021-12-31 17:00:00

当我们拥有了自己的域名时, 应当配置SSL/TLS证书实现HTTPS加密访问

我们为什么需要HTTPS ?

在HTTP访问时, 所有的流量请求都是以明文方式送出的, 如果有人在传输途中抓包, 你所有的传输数据都将会被泄露给窃听者;HTTPS是一种通过计算机网络进行安全通信的传输协议, 其经由HTTP进行通信,但利用SSL/TLS来加密数据包.

需要哪些步骤来实现HTTPS加密访问?

為了在你的網站上設定 HTTPS,你需要從憑證頒發機構 (Certificate Authority, CA) 獲取憑證. 在这里我们选择从Let’s Encrypt申请免费的SSL/TLS证书, Let’s Encrypt 是一個免費、自動化、開放,為了公眾利益而運作的憑證頒發機構 (Certificate Authority, CA)。它是由 Internet Security Research Group (ISRG) 所提供的服務。


本案例中我們選擇Raspberry Pi 4 Model B Rev 1.4在Ubuntu 20.04.3 LTS aarch64下進行

安装snapd

snap install core; sudo snap refresh core

安装Certbot

snap install --classic certbot

完成后使用Certbot的手动模式向Let's Encrypt 申请证书

certbot certonly --manual --preferred-challenges=dns-01
  • certonly 為只申請/續簽證書命令, 不執行安裝操作
  • --manual 选项指以交互或Shell脚本的方式提交信息, 這裏我們不使用脚本, 默认是交互方式
  • --preferred-challenges 选项以指定域名认证方式, http-01是文件认证, dns-01是DNS解析指定TXT认证,这里用的DNS认证

執行完命令后, 在交互模式下首先需要提交相关信息, 輸入邮箱后回車

23c769da8dab4476d930be05121ee6f3_release.png

输入电子邮件地址 (用于紧急续订和安全通知)

接下來你需要接受服務條款, 輸入Y並回車繼續

ff719b928c348cf336b45e11f80c121d_release.png

请阅读以下服务条款: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf.你必须同意以便在ACME服务器上注册。你同意吗?

再然后是一些新闻之类的邮件推送,可以不接受

d52b8eae3620fa453ade4f63e772d32e_release.png

一旦您的第一份证书成功颁发, 您是否愿意分享你的电子邮件地址与电子前沿基金会, 成立Let's Encrypt项目的合作伙伴和开发Certbot? 我们想向您发送电子邮件, 介绍我们加密网络的工作, EFF新闻、活动和支持数字自由的方式。

输入你需要申請的域名, 如果你想用通配符包含所有的域名需要注意, 通配符不包含主域名, 所以申請需要填兩個, 多個之間以逗號分隔

732360cec724c3f2525c1f4452fcc03b_release.png
請輸入你想要申請證書的域名 (逗號和/或者空格來分隔) (使用 'c' 來取消)

接下来会给出需要做DNS TXT记录验证的信息來通过DNS认证域所有权

bbc797e893518e3c6e71cf11e8f3c458_release.png

请在以下名称下部署DNS TXT记录:

_acme-challenge.mknetwork.net.

使用以下值:

XXXXXXXXXXXXXXXXXXXXXXX

在繼續之前, 請驗證TXT記錄是否已部署. 这可能需要一些时间, 根据DNS提供商的不同, 一般為几秒钟到几分钟不等, 你可以借助在线工具比如如Google Admin Toolbox來检查它是否已完成部署: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.mknetwork.net. 在“;ANSWER”行下方查找一行或多行粗体. 它应该显示您刚刚添加的值.

在你的DNS記錄中添加給出的TXT記錄, 例如:

d1c1247386125bc0b0bedc605dee7c63_release.png

圖例為在Cloudflare的DNS記錄中添加TXT記錄

DNS生效可能需要幾秒鐘到幾分鐘不等, 我們可以使用官方推薦的Google Admin Toolbox來驗證DNS是否生效, 我們可以直接訪問命令窗口上給出的鏈接, 也可也手動訪問 https://toolbox.googleapps.com/apps/dig/ 輸入TXT記錄名稱在下面類型選擇TXT, 當出現結果而不是顯示Record not found!時, 則表明TXT記錄已生效

ff2628d5dce10962ceb64835c8906b4f_release.png
查詢到目標TXT記錄, 説明DNS記錄生效

在確認TXT記錄生效後, 回到終端窗口, 按下回車繼續即可成功創建證書如下圖, 這還包含以下内容: 證書的路徑位置, 密鑰的路徑位置以及到期時間

15a9653f288cf52aade5ffb146848674_release.png

已成功接收证书.

证书保存在:/etc/letsencrypt/live/mknetwork.net/fullchain.pem

密钥保存在:/etc/letsencrypt/live/mknetwork.net/privkey.pem

该证书将于 2022-04-01 到期.

这些文件将在证书续订时更新.

下一步: 此证书不会自动续订。 --manual 证书的自动续订需要使用身份验证挂钩脚本 (--manual-auth-hook),但未提供。 要更新此证书,请在证书到期日期之前重复此相同的 certbot 命令.

如果您喜欢 Certbot,请考虑通过以下方式支持我们的工作:

*捐赠给 ISRG / Let's Encrypt: https://letsencrypt.org/donate

*捐赠给 EFF: https://eff.org/donate-le

接下來將證書和密鑰複製到目標位置或者指定到目標路徑配置即可, 例如在Nginx中:

ssl_certificate 為證書的路徑

ssl_certificate_key 為證書私鑰的路徑

配置如下圖所示

0301edac8c771b4dae9cacfc97f60fe2_release.png

保存後重載Nginx, 使用https訪問目標域名, 檢查證書可以看到已經應用成功

285210b2375f2b57b6709ee2d1c8876e_release.png

現在, 你已經成功配置完成證書并以HTTPS加密訪問此域名🎉


關於證書續期

申請的證書默認有效期為3個月, 快到期時Let’s Encrypt將會給你傳送郵件提醒你證書快要到期

使用下面的命令來爲證書續期:

certbot --manual --preferred-challenges dns certonly


參考文章:

少數派:手动申请 Let's Encrypt 通配符证书 https://sspai.com/post/66008