有一題,掃描報告上出現一條「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,網址最前面那個選項點下去
點這個,已建立安全連線
再點這個,憑證有效
長這樣
同一份報告上還有另一類弱點,講的是這台伺服器支援哪些協定、允許哪些演算法。這一層才是設定。
cipher suite 就是這層的東西,中文常翻成密碼套件。它的名字看起來很長,其實是好幾段接起來的,例如 ECDHE-RSA-AES256-GCM-SHA384 可以拆成四段:
| 這一段 | 在管什麼 |
|---|---|
| ECDHE | 這次連線的金鑰怎麼談出來 |
| RSA | 用什麼來驗對方身分 |
| AES256-GCM | 資料本體用什麼加密 |
| SHA384 | 拿什麼做完整性 |
報告上這一層的弱點,長相大概是這幾種:
協定版本這邊,TLS 1.0 跟 1.1 在 RFC 8996 裡已經被寫成不該再用,理由之一就是它們的完整性還掛在 SHA-1 上。
這些東西全部都在那台機器自己的設定檔裡,改完重啟就生效,不用去問 CA。
這些不用一條一條去猜,nmap掃一次就印出來了。這張是掃 badssl.com 的 3des 測試站,這個站就是故意只留 3DES 的。

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 連線,沒有送什麼奇怪的東西出去。但要動設定就只在自己管得到的機器上動,關舊協定之前也先確認還有沒有老設備要連進來,不然電話會很多。