Site icon Mr. 沙先生

用 nmap 驗證支援的 TLS 版本和 Ciphers

由於 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 來達成平日的作業。

 

Exit mobile version