iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0

有一題,掃描報告上出現一條「SSL Certificate Signed Using Weak Hashing Algorithm」,問我要怎麼修。

我看到 weak hashing algorithm,直覺性的挑了「把伺服器調成只用安全的雜湊函式」那個選項。

正解是向 CA 重新申請一張憑證。

憑證上面到底寫了什麼

憑證就是一份檔案,裡面記著這台伺服器叫什麼名字、它的公開金鑰是哪一串、什麼時候到期,再由 CA 用自己的私鑰對這些內容算一段簽章蓋上去。

CA 是 Certificate Authority,發憑證的那一方,瀏覽器裡本來就內建一串信任它們的根憑證。簽章的作用是讓連上來的人可以確認,這份內容從簽完那一刻到現在沒有被動過。

Subject Common Name 是憑證上記的那個名字,FQDN 則是 Fully Qualified Domain Name,你實際連過去打的那個完整網域名稱,兩邊要對得上才不會跳警告。

為什麼伺服器調不掉

簽章用哪一種雜湊演算法,是簽的那一刻就決定的,而且寫在憑證裡面。

伺服器只是把這張憑證拿出來給對方看,它不是簽的人,也沒有改內容的權力。內容一改,簽章就對不上,對方那邊反而直接跳警告。

所以那條弱點的主詞是「這張憑證」,不是「這台伺服器」。我當時的想法很單純,雜湊演算法聽起來就是一個可以設定的東西,那就去設定裡面找吧。

名稱不符也是同一層。憑證上寫的名字跟實際連到的名字不一樣,可能是這張憑證本來是給另一台設備做的,也可能是設備後來換過名字。這件事我目前沒找到哪個伺服器設定擺得平,就是要一張名字對的憑證。

過期也一樣是憑證那層,只是處理起來單純一點,續簽就好。

說到這裡可能想知道憑證長甚麼樣子
想看的話自己到google.com,網址最前面那個選項點下去
image
點這個,已建立安全連線
image
再點這個,憑證有效
image
長這樣
image

那可以調的是哪一層

同一份報告上還有另一類弱點,講的是這台伺服器支援哪些協定、允許哪些演算法。這一層才是設定。

cipher suite 就是這層的東西,中文常翻成密碼套件。它的名字看起來很長,其實是好幾段接起來的,例如 ECDHE-RSA-AES256-GCM-SHA384 可以拆成四段:

這一段 在管什麼
ECDHE 這次連線的金鑰怎麼談出來
RSA 用什麼來驗對方身分
AES256-GCM 資料本體用什麼加密
SHA384 拿什麼做完整性

報告上這一層的弱點,長相大概是這幾種:

  • SSLv2 或 SSLv3 還開著。這兩個版本很舊了,POODLE 打的是 SSLv3,DROWN 打的是 SSLv2。
  • TLS 1.0、1.1 還開著。這兩個在 RFC 8996 裡已經被寫成不該再用,理由之一是它們的完整性還掛在 SHA-1 上。
  • cipher 清單裡還留著 RC4、DES、3DES。3DES 對應的是 SWEET32,它一次只處理 64 bit 的區塊,同一把金鑰傳久了就有機會被對照出東西來。
  • 清單裡有 NULL 或 EXPORT 等級的套件。NULL 是連加密都沒有,EXPORT 是早年美國出口管制留下來的短金鑰版本。
  • 匿名那一類(名字裡有 ADH、AECDH),它跳過驗身分這一步,所以中間有人插隊你也不知道。
  • 金鑰交換沒有用 ECDHE 或 DHE,也就是沒有前向保密。前向保密的意思是每次連線都重新談一把臨時金鑰,之後就算有人拿到伺服器的私鑰,也解不開他之前錄起來的那些流量。
  • TLS 壓縮還開著,這個對應 CRIME
  • DH 參數的位元數太短,被降到 EXPORT 那種等級,這個對應 Logjam

協定版本這邊,TLS 1.0 跟 1.1 在 RFC 8996 裡已經被寫成不該再用,理由之一就是它們的完整性還掛在 SHA-1 上。

這些東西全部都在那台機器自己的設定檔裡,改完重啟就生效,不用去問 CA。

這些不用一條一條去猜,nmap掃一次就印出來了。這張是掃 badssl.com 的 3des 測試站,這個站就是故意只留 3DES 的。

image

TLSv1.0 跟 TLSv1.1 兩個標題都還在,代表它到現在還接這兩個版本。底下三條 cipher 的開頭是 ECDHE、DHE、RSA,就是四段裡的第一段,最後那條 TLS_RSA 就是沒有前向保密的那種。三條的後半都是 3DES,nmap 自己把話講完了:64-bit block cipher 3DES vulnerable to SWEET32 attack。

後面的 C、D 是 nmap 給的等級,DHE 那條是 D,下一行有寫為什麼,它的 dh 1024 比憑證的 rsa 2048 還弱。

中間那行 compressors: NULL 倒不是壞事,它說的是沒開壓縮,跟 cipher 裡的 NULL 是兩回事,只是名字撞了。

我後來先看主詞

報告上寫什麼 我的理解
Certificate signed using weak hashing algorithm 憑證那層,要一張新的
Subject CN does not match server FQDN 憑證那層,名字要對
Certificate expired 憑證那層,續簽
SSLv3 / TLS 1.0 enabled 設定那層,關掉
弱 cipher 還開著 設定那層,改清單

我後來是先看那條弱點在講誰。主詞是憑證,就準備換一張;主詞是「這台伺服器支援什麼」,才去翻設定檔。

自簽憑證的情況兩層剛好是同一個人在管,看起來像同一件事,但那張還是得重簽一次,不是去改設定。

這個可以自己看

openssl 底下有一個 s_client,可以把一次交握的內容整串印出來:

openssl s_client -connect example.com:443

跑完往上翻,憑證那層看 subject 裡的 CN 跟簽章演算法,設定那層看最後面協商結果的 protocol 跟 cipher 那兩行。官方文件在這裡

挑幾個自己天天在用的網站跑一次,有些老站台協商出來的結果跟新站差蠻多的。

連公開網站做這件事,基本上就只是一次正常的 TLS 連線,沒有送什麼奇怪的東西出去。但要動設定就只在自己管得到的機器上動,關舊協定之前也先確認還有沒有老設備要連進來,不然電話會很多。


上一篇
Day06|Process也有Parent
系列文
從桃子園灘頭到CySA+7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言