Let’s Encrypt 的 DNS-01 Challenge

自從我懂事以來,都是利用 certbot 進行 「HTTP-01 Challenge」,讓發證單位透過http方式驗證,以取得免費的https證書。

除非遇到Let’sEncrypt考驗伺服器秀逗,否則不可能出問題;長大後,我雄心壯志到各地歷練,發現有些主機 80、443 port 居然被封鎖,沒有了80 port (http),就無法透過HTTP-01考驗方式取得https證書。直到此時,我才知道「代誌不是我們憨人想的架甘丹」—事情不是我們想像的這麼簡單啊。

Let’s Encrypt的Challenge Types,列出支援的驗證類型,裡面提到若 HTTP-01 不能用,還有其他選擇,例如本文要說的:DNS-01 Challenge

DNS-01 使用原理很簡單:DNS伺服器提供ACME DNS API,讓Let’s Encrypt能夠透過API進行考驗,就能取得https證書了。


2024-4-2
新作法 使用開源acme.sh專案

1. 線上安裝

# 若需要使用dns-01方式,email必須是提供API token相同帳號
curl https://get.acme.sh | sh -s email=xxx@test.com

2. 使用DNS方式授權
取得API Token 或 API Key (以 cloudflare 為例子)

3. 取得授權

export CF_Key   = "b0e689102efab2cf7a1547aaa8b57c4eb65ff"
export CF_Email = "提供API Key之email帳號"
或是
export CF_Token = "ibrxxFFlKZ5FrsBpisXRU7GzO_2KzSwRAQoAwbsT"
export CF_Email = "提供API Token之email帳號"

acme.sh  --issue  --dns dns_cf  -d remote.test.com

google domains 為範例:(很可惜google賣掉網域代管業務)

1、先建立權杖(token)

登入google domain後,點選「安全性」->ACME DNS API 「建立權杖」

此權杖只會出現一次,因此複製後,要妥善保存

2、我想使用certbot方式取得憑證,所以到 「certbot-dns-google-domains 」github ,取得執行方式。
2.1 新增權杖檔案

vi /var/lib/letsencrypt/dns_google_domains_credentials.ini
dns_google_domains_access_token = QWVpQWZjT1xxxxxxg2N3lrMi1LUQ==
dns_google_domains_zone = test.com

2.2 docker方式執行,輕鬆取得https證書。

docker run \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  --cap-drop=all \
  ghcr.io/aaomidi/certbot-dns-google-domains:latest \
  certbot certonly \
  --authenticator 'dns-google-domains' \
  --dns-google-domains-credentials '/var/lib/letsencrypt/dns_google_domains_credentials.ini' \
  --server 'https://acme-v02.api.letsencrypt.org/directory' \
  --non-interactive \
  --dns-google-domains-zone 'test.com' \
  -d 'xxx.test.com'

3、還有其他取得證書方式(一樣是google domain)
請參考 List of known ACME clients to work the ACME DNS API


若使用的是阿里雲解析,可參考這篇文章,我自己測試結果沒問題;提醒一下,要使用let’s encrypt,dns需要有CAA record 允許let’s encrypt 發證,否則會出現 「Verify error : CAA ……」錯誤

未免忘記,節錄一些指令;
除了指令外,還需要在阿里雲加上RAM帳號,授權該帳號能透過阿里雲OpenAPI修改DNS,
並且取得該RAM帳號「Key」與「Secret」,以下指令需要用到。

yum install socat
curl https://get.acme.sh | sh
vim /root/.acme.sh/acme.sh.env
export LE_WORKING_DIR="/root/.acme.sh"
alias acme.sh="/root/.acme.sh/acme.sh"
export Ali_Key="xxxx"
export Ali_Secret="yyyy"
source ~/.bashrc
env
acme.sh --set-default-ca --server letsencrypt

acme.sh --issue --dns dns_ali --dnssleep 180 -d xxxx.test.com
#若以上指令不行,可改以下指令
acme.sh -f --use-wget --issue --dns dns_ali --dnssleep 180 -d xxxx.test.com

2023/6/16 我在RockyLinux 9.2安裝失敗出現以下問題(google代管之網域)

[Errno 13] Permission denied: '/etc/letsencrypt/.certbot.lock'

這很複雜,原因很多,我的解法如下:

解法1. selinux 放行,然後再關起門來
 setenforce 0 ; docker run \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  --cap-drop=all \
  ghcr.io/aaomidi/certbot-dns-google-domains:latest \
  certbot certonly \
  --authenticator 'dns-google-domains' \
  --dns-google-domains-credentials '/var/lib/letsencrypt/dns_google_domains_credentials.ini' \
  --server 'https://acme-v02.api.letsencrypt.org/directory' \
  --non-interactive \
  --dns-google-domains-zone 'test.com' \
  -d 'xxx.test.com' ; setenforce 1;

解法2. 確認相關套件是否安裝
dnf install httpd mod_ssl
certbot --apache
#若出現The requested apache plugin does not appear to be installed,則代表缺少套件
yum list installed|grep certbot
certbot.noarch                                   2.6.0-1.el9                         @epel
python3-certbot.noarch                           2.6.0-1.el9                         @epel
這樣還缺少  python3-certbot-apache , 我再安裝一下
dnf install python3-certbot-apache

2023年新書《獵女犯》小小心得

陳千武1976年於《台灣文藝》發表了〈獵女犯〉短篇小說。

多年後(1999年)晨星出版社將〈獵女犯〉與其他「台灣特別志願兵」二戰太平洋戰爭相關文章,依序集合成冊名為—《活著回來》

今年(2023)大塊文化重新出書,終於以《獵女犯》為書名重新刊印,還增量且收錄未公開草稿。

我買到書後,快速翻閱拜讀一番,個人覺得:1、書名比《活著回來》貼切;2、收錄更多文章;3、內容經過更仔細的編排,讓人閱讀愉快順暢。

我建議看此書之前,務必先看書評,才能Get到精華,特別推薦看「朱宥勳使出人生攻擊!」講評。

書中最引我注意的是「運輸船」那篇文章,說的是林逸平最初派到印尼前,遭澳洲聯軍轟炸,四處血肉模糊的景象。這非常的真實,若沒有親身體驗,我想寫不出來的。

另外還有一些情愛描寫,甚至林逸平成為准尉長官的禁臠,都毫不掩飾寫下來,在那個時空背景下,能活著、能盡興,只要能獲得一絲絲的快樂,才是最重要的。至於「女犯」之一的賴莎琳,我覺得她早已接受命運,但也只能對著自己信任的人,大肆表達不滿、發洩,然後認清現實。

唉啊,原來重機槍能「打爆」飛機啊!

偵察機低空飛到叢林上方,欲探知日本部隊佈屬狀況;此時,林兵長早已把重機槍對準偵察機,甚至能肉眼看到飛行員,就等長官下令轟爆飛機,好險沒有這樣做相對於無害的偵察機。長官罵林兵長,若暴露部隊所在,進而引來後面的戰鬥機,才是真正致命的打擊。這跟我們了解的現代化軍備差異太大,那個年代,戰爭是真真實實的近戰、真真實實的肉身對抗。

我飛快將書看了一遍後,就放在書桌上了。過了幾天,太座看到書桌上的《獵女犯》,直覺問我:

「好奇怪的書名,是指『獵女』,還是『獵』女犯?」

我自己也被問得啞口無言,心裡認為應該是「獵‧女犯」,也有點覺得是「狩獵女人」的「犯人」。原來不知道此書來歷的人,光是看「書名」,完全不知道是甚麼樣的書呢。

我嘗試解釋說:這是日本部隊於太平洋戰爭時期,在印尼帝汶島的一段「狩獵」印尼女土著當俘虜,以及押送過程的故事。而整本書應該是以這個「獵」到的女犯人為書名,我把相關「台籍特別自願兵」如何被派往印尼,如何過著既是統治者內心又充滿被殖民者的矛盾心情,用通俗易懂的方式告訴內人;說到興致處,我還想指出獵女犯是一篇很早就寫好的文章,是非常少見「真‧戰爭系列」台灣文學小說時,就不見內人蹤影了,顯然這題材比較冷門,尤其是台灣。

回想起我的三姨丈,如同「獵女犯」主人公一樣,為台籍特別志願兵,三姨丈會說流利英文,日文,台灣話;他是高中畢業後,被強制受訓擔任海軍飛機維修工程師,還曾修過大名鼎鼎「零戰」。只可惜,姨丈直到往生閉口不提往事,只能從表哥表姊口中得知一二,這段「台籍特別志願兵」經歷也沒被記錄下來,甚是可惜。

#獵女犯
#陳千武

感謝”Linux技術手扎”對於apache http調校說明

長期以來,我「HTTP反向代理伺服器」只使用「Apache Http」, 理由簡單:習慣了;然而,新興的代理伺服器總讓我有種「雖簡單卻很艱難」的感受,雖說採用新服務器是進步的象徵,但我考量自己管理的網站達數十個,非常在意網站穩定性,若貿然決定更換新「反向代理服務器」,則需要很大的勇氣,誰都無法知道被代理的服務器會不會水土不服,造成災難,因而作罷。

一般來說,apache httpd運作很穩定,沒事就不要動設定;但是我總是遇到代理服務器重啟很慢的問題,原本也沒有多想,訓練自己忍耐力XD,直到遇見”Linux技術手扎“,網站中有兩篇文章,對於apache http效能,防止阻斷攻擊(DoS)有詳細說明。我拜讀之後,受用不盡,因此也節錄下來,作為自己快速參考用。

1、解決apache http重啟慢問題

vi /usr/lib/systemd/system/httpd.service
[Service]
...
KillMode=none
systemctl daemon-reload

2、防止阻斷攻擊(Dos)

vi /etc/httpd/conf/httpd.conf
...
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
systemctl restart http

想知道修改原因、運作原理,請參考網站

「公用電話專用」幣

最近買的書有點多。

既然有好些書都還沒看(其實是誠品會員年度續約需要買8次書),於是我每天得早早起床,到冷氣強、燈光美、氣氛佳的便利商店花點時間看書。

某日我看著看著,突然發現便利商店前面的「柱子」有「公用電話」,好笑的是,我天天經過,卻從來沒注意到它。我想這一定是我前陣子買的「公用電話專用」幣於昨天到手了,才會引起我的注意;不過,現在專用幣已不能使用,新的公用電話早已採用直接感應的方式付款。

​我之所以會買這個幣,原因為:1、70年代鑄造,問世時有其歷史特殊意義;2、刻印「古早味撥盤式電話」,金光閃閃復古好看。

70年代,當時世界正處於「石油危機」,台灣因為「一元」流通幣,含有稀缺金屬,已經超越幣值,反而變得「不流通」了。
這樣麻煩來了,民眾沒一元「硬幣」可到公用電話打電話,就算有也不拿出,甚至高價賣掉;但是電話還是要用的,而「電話」這種高科技產物,可不是家家戶戶都有,因此人們只好上訪陳情,希望政府解決這問題。最後,電信總局與台灣銀行想出一帖妙方:鑄造「公用電話專用」幣(材質避開稀缺金屬)。此法一出,民眾可用紙鈔兌換代幣使用,解決無幣可用窘況,實在太有才了。

石油危機過後,電話專用幣於1976年開始回收銷毀。如今,「公用電話專用」幣反而稀缺,我最近買了10枚,既然專用幣有「聯繫友人」之意涵,就很想學金庸《俠客行》裡的謝煙客,無論是誰,只要拿到謝煙客的「玄鐵令」,就可以要求他做一件事,讓我當當大俠過過癮。當然啦,我的「大俠」幣,肯定遠不如書中人物之「玄鐵令」,擁有者大概也只能要求我「重灌電腦」吧。

​#錢幣
#公用電話專用幣

windows出現「藍框框」,原來是誤開啟「朗讀程式」

今天我的電腦(win11),出現怪怪的「藍框框」,這個藍框框還會自己跳來跳去、靈活走位,真是嚇死寶寶了。

原來是誤開啟「朗讀程式」,這現象我以前遇過,但忘了甚麼原因造成。隨後我google許久,原來是我誤按「快速鍵」(Windows 標誌鍵 + Ctrl + Enter),系統就自己「朗讀了」起來 XD;因為已經發生兩次,代表我也會偶發誤觸這群快速鍵組合,所以我趁「記憶尤新」的時候,趕快記錄下來。

拜讀《一次搞懂標點符號》

偶然間,我在滑「youtube」時,看到「朱宥勳使出人生攻擊!」的「文字診療室」影片,影片中朱老師講解了「引號」與「句號」的正確用法,讓我非常驚豔。僅僅幾十分鐘,就能讓我弄清楚「句號」在什麼情況下,應該在「引號」裏或外,真的非常受用,我也馬上被圈粉。

朱老師在影片裡,亦推薦康文炳的《一次搞懂標點符號》,我「感應」到這本書非買不可,迅速到「誠品線上」訂購拜讀。果然!書中對於標點符號的精譬解說,讓我佩服到五體投地。對於以往讓我會心荒荒的「頓號」「分號」,書中更列舉諸多正確、錯誤範例用法,讓我獲益良多,寫起部落格更有信心,感謝兩位老師。

#朱宥勳

#康文炳

outlook搜尋不到email原因為何

公司的麻瓜有一天跑來說:「我無法搜尋郵件,昨天能搜尋到,今天就不行了。」原本我還想說,一定是沒有這封信才會找不到(當然先相信outloook);我當下要求麻瓜證明真有這些email。沒多久,還真的找出來!可是我再次輸入該封email的標題,一樣搜尋不到,這下掉漆了。

我趕緊回位子google「outlook can’t search email」,google出現很多解法,步驟有二:

第一、先確認索引狀態。(這部分可以設計給麻瓜自行確認是否索引正在進行中)
我遇到的狀況,email檔案有49GB,很巨大。因outlook本身也會自動定期「重建索引」,但檔案超級大,需要很久很久時間才能完成,在完成之前,當然搜尋不到;而我們也無計可施。

第二、進行「重建索引(rebuild index)」的工作。

wordpress 6.2.0 docker版本疑似被植入木馬

我在2023年4月6日,將網站升級到6.2.0(docker版本) : 回想起一開始升級時, 容器(container)為舊版, 我沒有採用拉取(pull)方式升級, 直接使用內建升級功能,可惜失敗了!出現找不到“sw-check-permissions-e2a8b.js”錯誤;於是我改用拉取最新容器方式升級, 而且成功了。

升級後,,我陸續寫了好幾篇文章,卻沒有發現網站已經有狀況了。直到今日(4月24日),我在同事電腦,瀏覽自己網站時,防毒軟體居然跳出”木馬”警告,我才意識到出事了!

警告內容為「bujerdaz.com」這個網站有木馬;既然有明確網站名稱,肯定網站內有這些字眼,我馬上登入網站伺服器,搜尋了一番, 還真的有找到:

找到問題後, 接下來就是決定解決方式: 1、刪掉這一行含木馬之語法;2、查看看容器是否有最新版

第一種做法「刪掉木馬語法」通常逼不得已才做;於是我先選擇第二種「查看容器是否有新版」,沒想到,一模一樣的6.2.0版本,居然有不同內容,這明顯是官方犯了錯誤!一般我們不會懷疑同版本容器,內容會被異動;若內容不同,必須進一個版號,並且昭告天下有修補版本! (官方並沒有說明)

這讓我以後升級需要多一個心眼,要以防毒軟體進行掃描,至少不要影響用戶端瀏覽網站。


2023/4/25 雖然升級新版容器,自以為問題已解決,沒想到問題還是在!仔細一看,是plugin外掛所造成的,難怪用新版容器還是無法解決,因「外掛」程式我繼續沿用,不因容器更換而刪除,當然「木馬」一直存在。我發現阻擋垃圾留言的外掛「akismet」,出現兩個版本: 一個5.0;另一個1.2。(理論上不該存在兩個版本) 版本1.2裡面寫到要連線 bujerdaz.com ,看起來應該是進行一些確認才允許留言,我認定非木馬程式,可能wordpress系統用太多年了,這次大版本升級造成兩個版本並存之現象;最後移除1.2版akismet,只留下5.0版本,就恢復正常了。另外,依照這邏輯,我的網站應該「有問題」很久了,真的很不好意思。

#wordpress
#virus
#Trojan

“工程師”與”音樂家”的組合

前幾天, 與公司研發主管聊到”搜尋關鍵字優化(SEO)”, 一般公司網站要能受到關注, 必須使出渾身解數;否則, 就乖乖出錢, 讓google賺.

聊著聊著,也談到他”水某”網站, 也能夠被搜尋到. 但是, 要能夠得到google搜尋機器人的青睞, 大概就多寫些文章, 才會被注意.

於是, 我也來推薦, 推的是音樂家賴韻如“老師, 大提琴專長, 氣質系美女. 反正就是正妹一枚, 正妹的工作室與夥伴, 在”綺饗音樂工作室“中, 共有三位老師, 在”綺饗音樂工作室”網站內有詳細師資介紹, 工作室開班授課, 教的非常非常專業, 只有一項「大提琴」, 小孩甚至成人都可以報名學習呢.

我部落格第一次推薦網站, 就獻給賴韻如老師了!

我深信到賴老師這樣的環境上課, 定能培養出才、藝兼具, 且擁有美好心靈的好孩子, 至少我認識她的腦公, 身為研發主管, 卻未散發工程師典型粗曠的氣質, 我覺得他一定是被美麗的老婆”潛移默化”, 變成很有氣質的研發人. 恩, 一定是的!

#大提琴教學

綺饗音樂工作室-提供愛樂者學習"弦樂"的專業環境

Certificat renewal failure during secondary validation: Remote PerformValidation RPC failed

今天公司有個網站, 到了每三個月要更新(renew)證書的日子, 沒想到卻出現「Certificat renewal failure during secondary validation: Remote PerformValidation RPC failed」這個錯誤訊息. 開始我還以為防火牆或網頁服務器出問題, 摸索一陣子卻找不出原因 XD

這麼多年來, 頭一遭遇到這問題; 隨著同仁瘋狂反應, 我緊張到瑟瑟發抖 ! 此時, 我突然想到可以到let’s encrypt官方論壇,查看有沒有人有相同問題. 幸運的是滿滿都是問題回報;原來是官網的主機出問題, 需要30~60分鐘時間修復.

經此風波, 我覺得有必要訂定SOP,用來解決發證書所造成的問題:

第一步: 發現renew失敗, 看log(/var/log/letsencrypt/letsencrypt.log).

第二步: 查看Let’s encrypt伺服器是否正常 https://letsencrypt.status.io/

第三步: 到let’s encrypt社群看看有沒有相同的問題反映

1 ... 6 7 8 9 10 ... 73