由於 TLS v1.0 已經在 2017 年陸續 EoL 了,所以最近公司在盤點所有 TLS 支援的清單列表,因為 Puppet 還沒有全部的機器都上,所以要用比較土法煉鋼的方式做。
主要是使用 nmap 來跑:
$ nmap --script ssl-enum-ciphers -p 443 example.com
如果你需要特殊 output 格式的話可以參考以下作法
模擬
情境是「我有一整個 10.0.0.0/16 網段的機器要確認 TLS 版本」,所以我在某一台機器用 nmap 來掃全部有 443 port 的 TLS 支援版本
script 可以查看 scanTLSsupport.sh。
先產生要掃的網段。
$ echo 10.0.{1..254}.{1..254} >> iplist.txt
然後建立 scanTLSsupport.sh,我只需要掃 TLSv1.0、TLSv1.1、TLSv1.2。
#!/bin/bash IPLIST=($(cat iplist.txt)) TLS_VER=(TLSv1.0 TLSv1.1 TLSv1.2) SCAN_PORT="443" NMAP_OPS="--host-timeout 3000ms --max-rtt-timeout 3000ms --script ssl-enum-ciphers -p ${SCAN_PORT}" OUTPUT="output.csv" for (( i = 0; i < ${#IPLIST[@]}; i++ )); do SUP_TLS=$(nmap $NMAP_OPS ${IPLIST[i]} | egrep "${TLS_VER[0]}|${TLS_VER[1]}|${TLS_VER[2]}" | cut -c 5-11) if [[ ! -z $SUP_TLS ]]; then echo -ne "\n${IPLIST[i]}" >> $OUTPUT for (( j = 0; j < ${#SUP_TLS[@]}; j++ )); do echo -n ",${SUP_TLS[@]}" >> $OUTPUT done fi unset SUP_TLS done
這邊必須特別注意的是,nmap output 的訊息會按照版本不一樣有所不同,所以在字串的 filter 這邊要注意,我使用的是 nmap 5.51,但如果你用的是 nmap 7 以上就需要修改 egrep。
執行這隻 scanTLSsupport.sh 會產生 output.csv 檔,以逗號分隔。
10.0.1.1,TLSv1.0,TLSv1.1,TLSv1.2 10.0.1.2,TLSv1.0 .. ..
單純記錄利用簡單的 script 來達成平日的作業。