现在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签发证书)