使用 Certbot 申請和自動續簽 Let’s Encrypt 的免費 SSL 證書

一. Let’s Encrypt 介紹

Let’s Encrypt 是當前最常用的免費 HTTPS 證書生成工具之一。該服務由非營利組織提供,致力于為全球范圍內的網站提供便捷的自動化證書頒發服務。雖然 Let’s Encrypt 證書的有效期只有90天,但是可以自動續期,這使得 Let’s Encrypt 更加易于使用和部署。

在使用 Let’s Encrypt 生成證書時,可以使用 Certbot 工具來執行此任務。下面是一個示例命令,用于生成證書:

首先確保你有一個合法可用的域名,example.com替換為你的域名

sudo certbot certonly \    --email example@qq.com \--server https://acme-v02.api.letsencrypt.org/directory \--agree-tos \--manual \--preferred-challenges=dns  \-d example.com \-d www.example.com
  • certbot: Certbot 工具名稱,certonly: Certbot 工具的插件,用于生成 SSL/TLS 證書。
  • –email example@qq.com: Let’s Encrypt 要求在生成 SSL 證書時提供有效的聯系電子郵件地址。
  • –server https://acme-v02.api.letsencrypt.org/directory: Certbot 生成證書的 ACME 服務器。這里使用 Let’s Encrypt v2 API 端點。
  • –agree-tos:同意 Let’s Encrypt 的服務條款。
  • –manual:指定使用手動模式生成證書。這意味著您需要在命令提示符下手動操作來驗證您擁有該域名。
  • –preferred-challenges=dns:指定 Certbot 使用 DNS 驗證方式進行證書頒發。這表示您需要將一個特定的 TXT 記錄添加到 DNS 進行驗證。
  • -d ‘example.com’:指定您想要為其生成 SSL 證書的域名。你可以通過添加多個 -d 選項來同時為多個域名生成證書。

請注意,由于 --manual 選項需要手動操作,因此它可能比其他選項耗費更多時間。另外,使用 DNS 驗證時需要在 DNS 服務商處添加 TXT 記錄以實現驗證,這在某些情況下可能會比較困難,也需要等待 DNS 緩存刷新。在選擇選項時,請根據您的需求和特定情況來作出最合適的選擇。

我們可以把 --manual --preferred-challenges=dns 替換成–preferred-challenges http-01并配置 Nginx 服務器的相應設置,使用 HTTP 驗證方式生成證書。

二. 生成證書的詳細流程

在 Linux 上使用 Certbot 來獲取并自動續期 Let’s Encrypt 的 SSL 證書是一個很好的選擇,因為 Certbot 是由 Electronic Frontier Foundation (EFF) 支持的官方客戶端。下面是詳細的步驟:

1. 安裝 Certbot

首先,你需要在你的 Linux 系統上安裝 Certbot。安裝方法取決于你使用的 Linux 發行版。以下是一些常見的 Linux 發行版的安裝指令:

對于 Ubuntu/Debian 系統:

sudo apt updatesudo apt install certbot

對于 CentOS/RHEL 系統:

sudo yum install epel-releasesudo yum install certbot

對于 Fedora 系統:

sudo dnf install certbot

2. 使用以下命令生成證書:

sudo certbot certonly \
--email example@qq.com \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--manual \
--preferred-challenges=dns  \
-d example.com \
-d *.example.com

請將 example@qq.com 替換為您自己的電子郵件地址,并使用您要生成證書的域名把 example.com 和 www.example.com替換成你自己的。

這里輸入它并等待幾分鐘以允許記錄傳播并進行驗證。一旦您添加了DNS記錄,該命令將在 /etc/letsencrypt 目錄中生成通配符證書。

注意: Certbot將提示您為該域名添加DNS TXT記錄。請使用您的DNS提供商或托管服務提供商的管理面板或API添加記錄, 你國內買的域名就在公有云廠商控制臺域名管理上配置,自己登錄界面多找找,我是在注冊域名服務商這里添加的DNS TXT記錄
在這里插入圖片描述

在這里插入圖片描述

如果成功的話,它會生成兩個文件:
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

3. 手動續期

Certbot 是申請的Let’s Encrypt的免費證書,有效期 3 個月,到期之后我們可以再次續期,達到永久免費的效果。

你只需要在到期前,再手動執行生成證書的命令,也就是以上步驟2,就ok啦。

4. 自動續期

4.1 方法1:使用DNS插件

如果你的 DNS 提供商支持 API 訪問,最好的解決方案是使用 Certbot 的 DNS 插件,這些插件可以自動處理 DNS 記錄的更改。例如,如果你使用的是 Cloudflare,你可以安裝和使用 Certbot 的 Cloudflare 插件:

  1. 安裝插件:

    sudo apt-get install python3-certbot-dns-cloudflare
    
  2. 配置 DNS API:
    創建一個 API 令牌并保存到一個安全的配置文件中,比如 cloudflare.ini,并設置適當的權限:
    如果使用全局 API 密鑰:

    dns_cloudflare_email = your-email@example.comdns_cloudflare_api_key = your-api-key
    

    如果使用 API 令牌:

    dns_cloudflare_api_token = your-api-token
    
  3. 確保文件權限正確:

    chmod 600 cloudflare.ini
    
  4. 修改續期命令:
    使用 DNS 插件重新獲取證書,并設置自動續期:

    certbot renew --dns-cloudflare --dns-cloudflare-credentials /path/to/cloudflare.ini
    

    驗證:

4.2 方法2:提供認證鉤子腳本

如果你沒有使用支持 API 的 DNS 提供商,或者你更愿意繼續使用手動模式,你需要創建一個腳本來自動處理 DNS 記錄的驗證。以下是一個來自cloudflare DNS提供商簡單的示例:

  1. 創建認證腳本(例如 auth-hook.sh):
#!/bin/bash
# Cloudflare API 設置
API_TOKEN="your_cloudflare_api_token"
ZONE_ID="your_zone_id"  # Cloudflare Zone ID
DNS_RECORD_NAME="_acme-challenge.$CERTBOT_DOMAIN."
# 創建或更新 DNS TXT 記錄
RESPONSE=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \-H "Authorization: Bearer $API_TOKEN" \-H "Content-Type: application/json" \--data '{"type":"TXT","name":"'"$DNS_RECORD_NAME"'","content":"'"$CERTBOT_VALIDATION"'","ttl":120}')
# 檢查 Cloudflare API 是否成功響應
SUCCESS=$(echo $RESPONSE | jq .success)
if [[ $SUCCESS != "true" ]]; then
echo "Failed to update DNS records."
echo "API Response: $RESPONSE"
exit 1
fi
# 休眠以等待 DNS 更改傳播
sleep 30

腳本說明
腳本使用 Cloudflare 的 API 接口創建一個 TXT 記錄,用于 Let’s Encrypt 的 DNS-01 驗證。
-使用 curl 發送 HTTP POST 請求到 Cloudflare 的 API 端點,以添加 DNS 記錄。
-使用 jq 解析 JSON 響應以檢查操作是否成功。
-在驗證之前等待 30 秒,以確保 DNS 更改已足夠傳播。

  1. 設置腳本權限
    給腳本文件設置執行權限:

    chmod +x auth-hook.sh
    
  2. 使用腳本續訂證書
    在 Certbot 命令中指定這個腳本作為認證鉤子:

    certbot certonly --manual --preferred-challenges=dns \--manual-auth-hook /path/to/auth-hook.sh -d "example.com" -d "*.example.com"
    


以上都可以在命令后加上 --dry-run 后綴進行測試,測試完成后刪除 --dry-run

4.3 使用crontab 進行調度

我這邊nginx用的是docker環境,需要把生成的證書同步到容器內。

  1. 編輯腳本 automatic_certificate_renewal.sh
#!/bin/bash
# 更新證書
# 方法1
/usr/bin/certbot renew --dns-cloudflare --dns-cloudflare-credentials /opt/cmd/cloudflare/cloudflare.ini
# 方法2
# /usr/bin/certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /opt/cmd/cloudflare/auth-hook.sh -d "byteromance.com" -d "*.byteromance.com"
# 覆蓋證書文件
cp /etc/letsencrypt/live/byteromance.com/privkey.pem /data/wordpress/wp_nginx/certs
cp /etc/letsencrypt/live/byteromance.com/fullchain.pem /data/wordpress/wp_nginx/certs
docker restart wp_nginx
  1. 設置crontab調度
 0 0 1 * * bash /opt/cmd/automatic_certificate_renewal.sh > /opt/cmd/log/cert/logfile_$(date "+\%Y\%m\%d").log 2>&1

三. 配置HTTPS

在生成證書后,使用以下方法之一來配置您的HTTPS,這里不作詳細的介紹。

  1. 對于Apache服務器:

    # 在您的虛擬主機文件中添加以下行:
    SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem                      
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem 
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    
  2. 對于NGINX服務器:

    # 在您的虛擬主機文件中添加以下行:
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    

🔥運維干貨分享

  • 系統規劃與管理師備考經驗分享

  • 軟考高級系統架構設計師備考學習資料

  • 軟考中級數據庫系統工程師學習資料

  • 軟考高級網絡規劃設計師備考學習資料

  • Kubernetes CKA認證學習資料分享

  • AI大模型學習資料合集

  • 免費文檔翻譯工具(支持word、pdf、ppt、excel)

  • PuTTY中文版安裝包

  • MobaXterm中文版安裝包

  • pinginfoview網絡診斷工具中文版

  • Xshell、Xsftp、Xmanager中文版安裝包

  • 辦公室摸魚神器,偽裝電腦系統更新中

  • Typora簡單易用的Markdown編輯器

  • Window進程監控工具,能自動重啟進程和卡死檢測

  • 畢業設計高質量畢業答辯 PPT 模板分享

  • IT行業工程師面試簡歷模板分享

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914659.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【kubernetes】--controller(DaemonSet)

Kubernetes DaemonSet 控制器詳解 它確保集群中所有(或部分)節點上都運行一個 Pod 的副本。當有新節點加入集群時,DaemonSet 會自動在新節點上創建 Pod;當節點從集群中移除時,這些 Pod 也會被垃圾回收。 DaemonSet 的核心特性 每個節點一個 P…

內測分發平臺應用的異地容災和負載均衡處理和實現思路

內測分發平臺應用的異地容災和負載均衡處理和實現思路如下:一、異地容災1.風險評估和需求分析:對現有的IT基礎設施進行全面的風險評估和需求分析,評估潛在風險和災害的可能性,以及確定業務和數據的關鍵性。2.設計備份架構&#xf…

【Vue】瀏覽器緩存 sessionStorage、localStorage、Cookie

嘿,各位 Vue 開發者們!今天咱們來好好聊聊瀏覽器里的三種緩存方式:sessionStorage、localStorage 和 Cookie。在實際開發中,合理運用這些緩存能讓我們的應用性能大幅提升,同時避免一些不必要的問題。下面就跟著我的筆記…

c#如何將不同類型的數據存儲到一起

在 C# 中,存儲不同類型的數據有多種方式,具體選擇取決于你的需求(類型安全、性能、靈活性等)。以下是常見的解決方案及其適用場景:1. 使用 object 類型(裝箱 / 拆箱)將所有數據轉換為基類 objec…

超唯美治愈風卡通插畫PPT模版

海洋卡通風治愈系PPT模版,兒童可愛治愈可愛PPT模版,治愈風商務通用PPT模版,治愈系課件PPT模版,治愈風插畫PPT模版,超唯美治愈風PPT模版,可愛插畫治愈系女孩PPT模版 超唯美治愈風卡通插畫PPT模版&#xff1a…

el-tooltip 快速滾動的時候出現殘影如何解決 vue3

<el-tooltip:disabled"isScrolling" <!-- 新增滾動狀態綁定 -->:popper-options"{ modifiers: [{ name: computeStyles, options: { adaptive: false }] }"effect"dark":content"label.name"placement"right-start"…

【經典面經】C++新特性 TCP完整收發數據 TLS1.2 TLS1.3

文章目錄cpp新特性C11C14C17C20tcp如何保證完整收發數據結論1. **面向連接的三次握手**2. **字節序號與確認機制**3. **校驗和&#xff08;Checksum&#xff09;**4. **超時重傳與快速重傳**5. **滑動窗口&#xff08;流量控制&#xff09;**6. **數據重組與排序**7. **四次揮手…

Spring AI 系列之十一 - RAG-進階RetrievalAugmentationAdvisor

之前做個幾個大模型的應用&#xff0c;都是使用Python語言&#xff0c;后來有一個項目使用了Java&#xff0c;并使用了Spring AI框架。隨著Spring AI不斷地完善&#xff0c;最近它發布了1.0正式版&#xff0c;意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4

文章目錄一、工具安裝二、gif 轉mp4三、mp4 兩倍速一、工具安裝 安裝 ffmpeg 工具&#xff1a; sudo apt install ffmpeg二、gif 轉mp4 1. 配置環境 核心指令: ffmpeg -i input.mp4 -filter_complex "[0:v]setpts0.5*PTS[v];[0:a]atempo2.0[a]" -map "[v]&q…

linux中INIT_MM_CONTEXT宏對pgd的重復賦值

在GNU C中&#xff0c;支持通過標號元素對指定結構體成員名進行初始化&#xff0c;這允許初始化值以任意順序出現。在linux內核中對init_mm初始化時有如下代碼。#define INIT_MM_CONTEXT(name) \.pgd init_pg_dir,struct mm_struct init_mm {.mm_rb RB_ROOT,.pgd swapper…

第十五章 STL(stack、queue、list、set、map容器使用)

棧stack使用&#xff1a;隊列queue雙向循環鏈表listlist構造函數list 賦值和交換list 大小操作list 插入和刪除list 數據存取list 反轉和排序排序算法sort降序操作排序案例#include<iostream> using namespace std; #include<list>class Person { private:string n…

【論文閱讀】HCCF:Hypergraph Contrastive Collaborative Filtering

論文出處&#xff1a;SIGIR 2022 CCF-A 論文地址&#xff1a;Hypergraph Contrastive Collaborative Filtering 論文代碼&#xff1a;akaxlh/HCCF: HCCF, SIGIR 2022 目錄 摘要 介紹 研究背景與核心問題 現有方法局限性 HCCF的創新解決方案 技術優勢 定義與相關工作 …

Retrofit+RxJava:打造聲明式REST客戶端的藝術 —— 像點咖啡一樣調用API

目錄一、告別Callback地獄&#xff1a;聲明式編程的魅力1.1 傳統網絡請求的痛點1.2 Retrofit的聲明式革命二、Retrofit核心配置工廠2.1 構建Retrofit實例2.2 常用注解速查表三、RxJava響應式魔法3.1 鏈式調用優雅變身3.2 超能力操作符盤點四、實戰演練&#xff1a;構建天氣查詢…

【離線數倉項目】——任務調度與數據可視化實戰

摘要 本文主要圍繞離線數倉項目中的任務調度與數據可視化實戰展開&#xff0c;介紹了業務流程虛擬節點、離線數倉任務調度、數據可視化等方面的內容&#xff0c;涉及DataWorks和QuickBI等工具的使用&#xff0c;并提供了相關的博文參考和項目實戰域信息。 1. 任務調度管理實戰…

【視頻格式轉換】.264格式轉為mp4格式

背景 視頻格式轉換是多媒體處理中的常見需求&#xff0c;尤其在視頻編輯、存儲或跨平臺播放時。H.264&#xff08;即AVC&#xff09;是一種廣泛使用的視頻編碼標準&#xff0c;以其高壓縮率和良好兼容性著稱&#xff0c;但通常以容器格式&#xff08;如.264裸流文件&#xff0…

JAVA學習筆記 使用notepad++開發JAVA-003

目錄 1 前言 2 部署notepad的java開發環境 2.1 下載并安裝notepad 2.2 設置新建文件的語言 2.3 安裝NppExec插件 2.4 編寫JAVA腳本 2.5 設置腳本執行快捷鍵 2.6 效果測試 3 小結 1 前言 JAVA可以使用記事本來編寫代碼&#xff0c;但是這種方式效率十分低下。我們可以使…

Vue Router 完全指南:從入門到實戰,高效管理前端路由

前言在現代化的前端開發中&#xff0c;路由管理是構建單頁應用&#xff08;SPA&#xff09;的核心功能之一。Vue.js 作為主流的前端框架之一&#xff0c;提供了強大的官方路由庫Vue Router&#xff0c;幫助開發者高效管理頁面跳轉、動態加載、權限控制等關鍵需求。無論是構建企…

Sentinel熱點參數限流完整示例實現

Sentinel熱點參數限流完整示例實現 1. 添加Maven依賴 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正則表達式深度解析:從LeetCode 3136題說起

正則表達式深度解析&#xff1a;從LeetCode 3136題說起 引言 正則表達式&#xff08;Regular Expression&#xff0c;簡稱RegEx&#xff09;是一種強大的字符串匹配工具&#xff0c;在字符串處理、數據驗證、文本搜索等場景中有著廣泛的應用。本文將以LeetCode 3136題"有效…

映美打印機-URL頁面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印機編號private $deviceIds &qu…