现在HTTPS已经在大量使用,测试HTTPS用到的主要工具就是curl、openssl、wireshark等,这里总结了一些常见的场景,如怎么样指定IP、指定SNI域名、指定TLS版本号、发送原始HTTP头、验证证书等。

使用curl

curl --resolve www.notsobad.work:443:1.1.1.2 https://www.notsobad.work -vv -o /dev/null

# 指定TLS版本,UA
curl --resolve notsobad.work:443:1.1.1.1 'https://notsobad.work/' -H 'User-Agent: Mozilla/5.0 ' --tlsv1.3 -vv -o /dev/null

使用openssl

参考1

基础使用

openssl s_client -servername www.notsobad.work -connect 1.1.1.1:443 

# 输出到文件
openssl s_client -servername www.notsobad.work -connect 1.1.1.1:443 | tee logfile

# 自动退出
echo QUIT | openssl s_client -servername www.notsobad.work -connect www.notsobad.work:443

openssl s_client -purpose "sslserver" -verify_return_error -connect www.notsobad.work:443 -servername www.notsobad.work

# 指定TLS版本
openssl s_client -connect www.notsobad.work:443 -tls1

# reconnects to the same server 5 times using the same session ID, this can be used as a test that session caching is working.
openssl s_client -connect 1.1.1.1:443 -servername www.notsobad.work -reconnect

session ticket

# 记录session ticket到文件
echo QUIT | openssl s_client -servername notsobad.work -connect 1.1.1.1:443 -tls1_3 -sess_out sess.pem -keylogfile keys1.txt

# 新连接使用session ticket文件
echo | openssl s_client -servername notsobad.work -connect 1.1.1.1:443 -tls1_3 -sess_in sess.pem -keylogfile keys2.txt

# 不使用session ticket, 多次重试
openssl s_client -reconnect -servername www.notsobad.work -connect 127.0.0.1:443 -no_ticket

原始HTTP请求头

HTTP头文件:

wxh-rmbp-2 :: ~ » cat x.txt
GET /official_web/product_front/images/code_icon.png HTTP/1.1
Referer: https://www.notsobad.work/list_goods/0/16235.html
Host: www.notsobad.work
User-agent:
Accept-Encoding: identity

使用openssl发送:

wxh-rmbp-2 :: ~ » cat x.txt | openssl s_client  -servername www.notsobad.work -connect www.notsobad.work:443 -ign_eof

查看证书内容

openssl x509 -in users.pem  -text -noout

使用nmap

nmap --script ssl-enum-ciphers -p 443 www.notsobad.work

使用tcpdump

过滤tls1.0的client hello数据包,参考2

tcpdump -w x.cap -ni eth0 '((tcp[((tcp[12] & 0xf0) >>2)] = 0x16) && (tcp[((tcp[12] & 0xf0) >> 2)+1] = 0x03) && (tcp[((tcp[12] & 0xf0) >> 2)+9] = 0x03) && (tcp[((tcp[12] & 0xf0) >> 2)+10] = 0x01))'

协议安全性检测

使用testssl.sh3

./testssl.sh --ip  1.1.1.1  https://www.notsobad.work/

证书透明度日志CT

https://certificate.transparency.dev/

新签发的证书会出现在证书透明度日志中,互联网上有些公开的查询服务,如 https://crt.sh/ ,可以搜索一个域名历史上出现过的证书,可以发现很多信息,如未公开的子域名,内网域名(有些组织的内网服务器也会使用外部CA签发证书)