# 使用 SSLScan 檢查 TLS 連線安全性 > 一步步帶你安裝、執行、讀懂報告,並附上常用指令與修正建議。 [TOC] --- ## 1. 什麼是 SSLScan? **SSLScan** 是一款以 OpenSSL 為核心的掃描工具,用來列出伺服器支援的 **TLS/SSL 協議版本**、**密碼套件(Cipher Suites)**、**證書資訊** 與部分安全設定(例如是否允許不安全的 TLS 壓縮或舊協議)。 **用途** - 確認是否仍支援 **過時協議**(如 SSLv3、TLS 1.0/1.1)。 - 檢查是否啟用 **弱密碼套件**(如 RC4、3DES)或缺少 **前向保密(PFS)**。 - 快速取得 **憑證有效期/簽章演算法/金鑰長度** 等資訊。 --- ## 2. 安裝 SSLScan ### 2.1 Windows(建議) 1. 到官方 GitHub 下載 **Release**:<https://github.com/rbsec/sslscan/releases> 2. 下載對應版本的 zip,**解壓縮**到任一目錄(例如 `C:\tools\sslscan\`)。 3. 在該目錄**開啟 PowerShell / CMD**。 :::warning :bulb: **Windows 便捷下載**:直接到 **Release** 頁下載編譯好的檔案,不需自行編譯。 ::: ### 2.2 macOS(Homebrew) ```bash brew install sslscan ``` ### 2.3 Ubuntu / Debian ```bash sudo apt-get update sudo apt-get install -y sslscan ``` ### 2.4 Fedora / CentOS / RHEL ```bash sudo dnf install -y sslscan # 或 sudo yum install -y sslscan(舊版) ``` --- ## 3. 快速開始(Quick Start) > **語法重點**:`sslscan [options] host:port` > **不要**在 host 前加上 `http://` 或 `https://`。 ### 3.1 基本掃描(443/TLS) ```powershell # Windows (PowerShell/CMD) .\sslscan.exe www.ettoday.net:443 ``` ```bash # macOS / Linux sslscan www.ettoday.net:443 ``` ### 3.2 常用選項 - `--no-failed`:只顯示成功(可用)的協議/密碼套件,清爽易讀。 - `--show-certificate`:輸出伺服器憑證的詳情(Subject/Issuer/Validity/Algorithm/Key Size)。 - `--starttls [smtp|imap|pop3|ftp|ldap|xmpp|postgres]`:針對 StartTLS 服務掃描。 - `--xml=out.xml`:將結果輸出為 XML(方便機器解析與 CI 報表)。 - `--timeout=<sec>`:設定逾時秒數(避免掃描卡住)。 - `--no-colour`:取消彩色輸出(記錄到檔案時更乾淨)。 **範例:** ```bash sslscan --no-failed --show-certificate --xml=scan-result.xml www.example.com:443 ``` --- ## 4. 範例畫面與輸出說明 下圖為執行結果示意(HackMD 圖片會依你帳號空間保存): ![介面示意1](https://hackmd.io/_uploads/rkJ7Ogc5a.png) ![介面示意2](https://hackmd.io/_uploads/BkWK_lc5a.png) ![介面示意3](https://hackmd.io/_uploads/H1M4te5ca.png) --- ## 5. 如何解讀 SSLScan 報告 ### 5.1 協議版本(Protocols) 你會看到類似以下區段: ``` SSLv2 not offered SSLv3 not offered TLSv1.0 offered TLSv1.1 offered TLSv1.2 offered TLSv1.3 offered ``` - **建議**:在金融、醫療、電商等敏感業務情境,**停用 TLS 1.0/1.1**,只保留 **TLS 1.2/1.3**。 ### 5.2 密碼套件(Cipher Suites) 每個協議下會列出支援的 Cipher,例如: ``` TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 128 bits TLSv1.2 (PFS) Preference ``` - **重點**: - **ECDHE-** 前綴代表 **前向保密(PFS)**,優先選用。 - **-GCM-** 表示使用 AEAD 模式(建議),取代舊式 CBC。 - **RC4**、**3DES**、**EXPORT**、**NULL** 等應 **全面禁用**。 ### 5.3 證書資訊(Certificate) 以 `--show-certificate` 會顯示憑證:主旨(Subject)、簽發者(Issuer)、有效期(Not Before/After)、簽章演算法(如 `SHA256withRSA`)、金鑰長度(如 `RSA 2048/3072/4096`、`EC P-256`)。 - **建議**: - 使用 **SHA-256** 或以上的簽章演算法。 - RSA **2048 位元以上**;或使用 **橢圓曲線(EC P-256/P-384)**。 - 憑證有效期管理妥善,避免過期。 ### 5.4 顏色提示(若啟用彩色輸出) - <span style="color:green">綠色</span>:安全、可用 - <span style="color:#FFD700">黃色</span>:需注意(相容性/潛在風險) - <span style="color:#f00">紅色</span>:不安全,應停用 > 備註:實際色彩與判斷門檻依版本而異,請以工具輸出為準。 --- ## 6. 常見情境與指令範例 ### 6.1 掃描非 443 連接埠 ```bash sslscan api.example.com:8443 ``` ### 6.2 掃描 StartTLS(以 SMTP 為例) ```bash sslscan --starttls smtp mail.example.com:25 ``` ### 6.3 只看成功項目 + 顯示憑證 ```bash sslscan --no-failed --show-certificate www.example.com:443 ``` ### 6.4 匯出 XML 報表 ```bash sslscan --xml=report.xml www.example.com:443 ``` --- ## 7. 常見問題(FAQ) **Q1:我用 `https://` 當主機名,為什麼掃描不通?** A:`sslscan` 參數是 `host:port`,**不要**加協議字首。正確示例:`sslscan www.example.com:443`。 **Q2:掃描只寫主機不寫埠可以嗎?** A:建議明確指定埠。例如 HTTPS 用 `:443`,否則在部分版本或服務會誤判。 **Q3:只看到 TLS1.0/1.1,該怎麼辦?** A:調整伺服器與反向代理的 TLS 設定(nginx/Apache/Load Balancer),啟用 TLS1.2/1.3,並移除過時協議與弱密碼。 --- ## 8. 加固建議(Remediation) 1. **停用舊協議**:關閉 **SSLv3、TLS1.0、TLS1.1**。 2. **優先 PFS + AEAD**:優先採用 `ECDHE + AES-GCM/CHACHA20-POLY1305`。 3. **憑證安全**:使用 **SHA-256+**、**RSA 2048+** 或 **EC P-256+**,設定自動續期提醒。 4. **禁用壓縮**:避免啟用 TLS 壓縮(可防 **CRIME** 類攻擊)。 5. **一致的 Cipher 排序**:在負載平衡器/伺服器設定明確列出與排序。 6. **定期掃描與 CI 整合**:將 `sslscan --xml=…` 納入管線,將弱項視為警報。 --- ## 9. 參考指令總表(Cheat Sheet) ```bash # 基本連線 sslscan example.com:443 # 只顯示成功項目 sslscan --no-failed example.com:443 # 顯示憑證細節 sslscan --show-certificate example.com:443 # 匯出 XML sslscan --xml=report.xml example.com:443 # StartTLS(SMTP) sslscan --starttls smtp mail.example.com:25 # 取消彩色輸出(記錄到檔案時更乾淨) sslscan --no-colour example.com:443 # 設定逾時 sslscan --timeout=10 example.com:443 ``` --- ## 10. 範例 > 範例: > `.\sslscan.exe https://www.ettoday.net` > **修正**:移除 `https://` 並加上埠號。 ```powershell .\sslscan.exe www.ettoday.net:443 ``` 執行後你會看到協議、密碼套件、憑證資訊等清單。 --- ###### tags: `SSLScan` `TLS` `HTTPS` `Security` `Audit`