网络安全的第一道防线:深入探索sslscan在SSLTLS证书安全检测中的原理与实践

一、前言

sslscan
用于扫描SSL/TLS证书并报告协议版本、密码套件、密钥交换、签名算法和证书详细信息等,帮助用户从安全角度加强数据传输安全性,同时,sslscan还可以将结果输出到XML文件中,以便外部程序使用。本文将详细介绍sslscan用法案例及其扫描原理。

终端输出的颜色编码及其含义:

颜色密码套件
红色背景空套件
红色字体破损套件(<=40 bit)、破损协议(SSLv2/SSLv3)或破损证书的签名算法(MD5)
黄色字体弱密码套件(<=56 bit或RC4)或弱证书签名算法(SHA-1)
紫色字体匿名套件(ADH或AECDH)

TLS协商过程

![img](https://img-
blog.csdnimg.cn/img_convert/f07a69bf20881e790b5824dc143434ec.png)

在TCP三次握手后的TLS握手阶段(即淡黄色部分)即为我们重点关注和检测的部分。

所在层级

![img](https://img-
blog.csdnimg.cn/img_convert/8e451a7b2c6f917fcc51ce10bf8382fb.png)

TLS 命名为安全传输层协议( Transport Layer Security
),实际作用在传输层偏上的会话层,它既不影响上层协议又能保证上层协议的网络通信安全。

二、安装

sslscan在各大发行版的软件源中几乎都有,可以直接从软件源安装:

发行版安装命令
ArchLinuxpacman -Sy sslscan
Centos/Redhatyum install sslscan -y
Debian/Ubuntuapt install sslscan -y
Gentooemerge --ask sslscan

也可以将源码git clone到本地进行编译安装:

代码语言:bash

复制

$ git clone https://github.com/rbsec/sslscan
$ cd sslscan
$ make static
$ ./sslscan --version

三、输出结构

不加任何参数的情况下,直接执行sslscan <目标>进行扫描,会完整的将各个部分展示到结果上。

各部分的输出含义如下:

区域原文含义
第一部分SSL/TLS Protocols支持的SSL/TLS版本
第二部分TLS Fallback SCSV是否支持TLS Fallback SCSV
第三部分TLS renegotiation是否支持TLS重协商
第四部分TLS Compression是否支持TLS压缩
第五部分Heartbleed是否存在心脏滴血漏洞
第六部分Supported Server Cipher(s)服务端支持的加密套件
第七部分Server Key Exchange Group(s)服务端支持的密钥交换组
第八部分SSL Certificate证书详细信息

以下面这段输出为例:

代码语言:bash

复制

$ sslscan www.google.com
Version: 2.1.2-static
OpenSSL 3.0.12 24 Oct 2023

Connected to 172.217.27.4

Testing SSL server www.google.com on port 443 using SNI name www.google.com

  SSL/TLS Protocols:  # 第一部分
SSLv2     disabled
SSLv3     disabled
TLSv1.0   enabled
TLSv1.1   enabled
TLSv1.2   enabled
TLSv1.3   enabled

  TLS Fallback SCSV:  # 第二部分
Server supports TLS Fallback SCSV

  TLS renegotiation:  # 第三部分
Secure session renegotiation supported

  TLS Compression:    # 第四部分
Compression disabled

  Heartbleed:         # 第五部分
TLSv1.3 not vulnerable to heartbleed
TLSv1.2 not vulnerable to heartbleed
TLSv1.1 not vulnerable to heartbleed
TLSv1.0 not vulnerable to heartbleed

  Supported Server Cipher(s):  # 第六部分
Preferred TLSv1.3  128 bits  TLS_AES_128_GCM_SHA256        Curve 25519 DHE 253
Accepted  TLSv1.3  256 bits  TLS_AES_256_GCM_SHA384        Curve 25519 DHE 253
Accepted  TLSv1.3  256 bits  TLS_CHACHA20_POLY1305_SHA256  Curve 25519 DHE 253
...略

  Server Key Exchange Group(s):  # 第七部分
TLSv1.3  128 bits  secp256r1 (NIST P-256)
TLSv1.3  128 bits  x25519
TLSv1.2  128 bits  secp256r1 (NIST P-256)
TLSv1.2  128 bits  x25519

  SSL Certificate:              # 第八部分
Signature Algorithm: sha256WithRSAEncryption
ECC Curve Name:      prime256v1
ECC Key Strength:    128

Subject:  www.google.com
Altnames: DNS:www.google.com
Issuer:   GTS CA 1C3

Not valid before: Dec 11 08:10:00 2023 GMT
Not valid after:  Mar  4 08:09:59 2024 GMT

四、用法案例及参数说明

需要注意,sslscan的所有参数选项必须写在被扫描的目标主机之前,不能写在后面,否则会报错,目前最新2.0版本是这样,后续随着版本更新可能有所优化。

正确示例:

代码语言:bash

复制

sslscan --show-certificate google.com

错误示例:

代码语言:bash

复制

sslscan google.com --show-certificate
1.扫描支持的SSL/TLS版本、cipher信息等

在**『输出结构』**中说过,不加任何参数的情况下,sslscan会显示总共八部分的内容。

同时,需要注意:

  • 目标可以是域名、IP;
  • 不指定端口的情况下默认为443,如需指定自定义端口,接:port即可,比如domain.com:8443
  • 输出结果中的服务端支持的加密套件(Supported Server Cipher(s)),Prefereed 表示优先选中的套件,Accepeted 表示支持的套件;
  • SSL/TLS等级和安全性:TLSv1.3 > TLSv1.2 > TLSv1.1 > TLSv1.0 > SSLv3 > SSLv2。

如果此时已经满足需求,则无需加任何多余的参数:

代码语言:bash

复制

sslscan <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/e8aeab24512c7437f0458dc365603f17.png)

2.检测OCSP的状态(–ocsp)
1)CRL和OCSP

在此之前,首先了解下什么是CRLCRL (Certificate Revocation List)证书吊销列表是[RFC
5280](https://cloud.tencent.com/developer/tools/blog-
entry?target=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc5280&source=article&objectId=2383594)定义的检查证书状态的机制。

想象一种场景,客户端通过SSL/TLS连接到服务端,怎么确保证书本身是否可靠安全?比如证书是否由于各种原因被证书申请者申请在证书有效期内提前吊销证书或安全原因被机构主动吊销(比如泄漏私钥的场景)?

首先每个证书颁发机构会维护并持续更新的一个已吊销的证书列表,任何想验证证书是否被吊销的用户都能下载此列表,如果列表中有你要被验证的证书,说明证书已经被吊销了,不再安全可信。

随着证书越来越多,CRL文件也愈来愈冗长,所以也会导致一些问题:

  • CRL列表随着被吊销的证书日益增多而变得冗长,每个客户端都必须取得包含所有证书序列号的CRL完整列表;
  • 刚被吊销的证书,CRL列表更新并不及时,比如客户端已经缓存了CRL的场景,在缓存期内,证书会被认为一直有效。

基于上面两个历史原因,在[RFC 2560](https://cloud.tencent.com/developer/tools/blog-
entry?target=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc2560&source=article&objectId=2383594)又推出了OCSP
(Online Certificate Status
Protocol)在线证书状态协议,可以完美解决上面两个问题,首先支持实时检查证书状态的机制,并且支持查询需要被验证的证书序列号是否有效,而无需像CRL一样将整个CRL列表弄下来,也节省了网络带宽资源。

虽然解决了CRL的两大难题,但OCSP也有一些弊端:

  • 证书机构需要实时处理来自世界各地的OCSP查询(OCSP Request),这对证书机构用于负责OSCP查询的服务器高可用性是一种挑战;
  • 如果OCSP请求没有得到成功,在进一步协商阶段可能会处于阻塞状态,比如OCSP服务器在境外被大陆限制访问或者被DNS污染,此时请求始终无法完成;
  • 通过OCSP Request发送给证书颁发机构进行实时查询证书可用性,也可能会导致泄漏客户端的隐私,知道客户端在访问谁。
2)OCSP预装订

为了解决OCSP弊端,OCSP可以装订在Web服务器上,此时客户端直接向Web服务器发送OCSP
Request,再由Web服务器统一去请求证书机构的OCSP服务器,并将结果缓存下来。

装订前:每台客户端第一次请求TLS证书时,都会先向CA证书颁发机构发送OCSP Request。

![img](https://img-
blog.csdnimg.cn/img_convert/3e55b8a9c3f8c3549406c2fe9bf1f6b8.png)

  • 1.client向Web服务器发起TLS握手请求;
  • 2.Web服务器响应TLS握手(返回证书);
  • 3.client向CA证书颁发机构的OCSP服务器发起OCSP查询;
  • 4.CA证书颁发机构的OCSP服务器向client返回查询结果。

装订后:客户端发送OCSP Request给Web服务端,由Web服务端向CA证书颁发机构发送OCSP查询请求,再响应给客户端,并将结果缓存下来。

![img](https://img-
blog.csdnimg.cn/img_convert/141f85d1646ceef1251840f7d9de838a.png)

3)检测OCSP装订状态

–ocsp 可直接检测对端是否支持OCSP装订:

代码语言:bash

复制

sslscan --ocsp

![img](https://img-
blog.csdnimg.cn/img_convert/c12d9839bed9cda7ad185e046549fdd7.png)

如果不支持则会明确显示:No OCSP response received.

![img](https://img-
blog.csdnimg.cn/img_convert/5e5e96382450e4b67b263fd4ac488027.png)

同时,myssl.com也支持在线检测:

![img](https://img-
blog.csdnimg.cn/img_convert/ae06e76e056244cb417b678536cc74e2.png)

顺便说下,Nginx可以在配置文件中启用OCSP装订,增加以下两行配置:

代码语言:bash

复制

ssl_stapling on;
ssl_stapling_verify on;
4)检测证书颁发机构的OCSP/CRL服务器

这项功能其实属于下面要讲的参数,即**–show-certificate**会展示证书的完整信息,也包括证书里指向的OCSP主机:

代码语言:bash

复制

sslscan --show-certificate <目标>|grep -A2 'Authority Information'

![img](https://img-
blog.csdnimg.cn/img_convert/e092750df8bf8b05c7ba10303ab71529.png)

百度的证书是DigiCert机构颁发的,因此OCSP指向的也是DigiCert的OCSP服务器,它甚至可以被浏览器进行访问:

![img](https://img-
blog.csdnimg.cn/img_convert/628c5c36e58ffa8e73976348d3f24e8c.png)

解析到的是国内CDN节点:

![img](https://img-
blog.csdnimg.cn/img_convert/bdeea3fadec099b877076a82761b8cbb.png)

同理,CRL证书吊销列表也会包含在证书信息里:

代码语言:bash

复制

sslscan --show-certificate <目标> | grep -A2 'CRL Distribution'

![img](https://img-
blog.csdnimg.cn/img_convert/338031d32a51505349b4e82e82d83cae.png)

这个crl文件时可以下载下来的,里面包含了被DigiCert吊销的证书序列号和吊销日期:

![img](https://img-
blog.csdnimg.cn/img_convert/fafd8ddee3d9a24579b280c013b190d5.png)

3.显示证书详细信息(–show-certificate)

–show-certificate
选项用于显示服务器提供的SSL/TLS证书的详细信息。sslscan会在扫描结果中包含服务器证书的详细信息,包括证书颁发机构(CA)、证书有效期、证书序列号、证书签名算法、公钥算法、公钥大小、主题备用名和颁发等信息。

使用此参数,会将证书的详细信息在最后一部分展示:

代码语言:bash

复制

sslscan --show-certificate <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/85370035a19a886d365b94076a0682bd.png)

篇幅过长,只截取部分:

![img](https://img-
blog.csdnimg.cn/img_convert/c3666837c859ebf82135299f7e86d098.png)

4.指定SNI(–sni-name)

SNI (Server Name
Indication)是TLS协议的一个扩展,在TLS握手时用来标记客户端的关键信息,它改变了TLS协议在握手阶段只能协商一个服务器名的限制,使得在一个IP地址和端口上可以同时支持多个域名或多个SSL证书,Web服务器可以检查SNI主机名,选择适当的证书,继续完成握手。

TLS+SNI和HTTP中发送Host头部是一样的,后者是客户端在请求头中包含主机名,但作用都是同一个IP地址服务于不同的域名,而区分不同域名的方法则是SNI或者Host。

示例:

代码语言:bash

复制

sslscan --sni-name=<domain.com> <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/331ac2dda12d676b333ca1f5ed89336f.png)

不指定SNI的情况下,目标是IP则为IP,目标是域名则为域名。

通过指定SNI,在Client Hello阶段可以看到,TLS头部里的SNI扩展字段,携带了我们指定的SNI主机名:

![img](https://img-
blog.csdnimg.cn/img_convert/20d9f41a1817ec1b6bd1ba0c38bb4d72.png)

TLS的Server Hello阶段返回的证书信息,也是此域名:

![img](https://img-
blog.csdnimg.cn/img_convert/83fb380c42a2dd8ccc1da7569e431375.png)

sslscan则是通过Server Hello包返回的信息,最终呈现在结果上:

![img](https://img-
blog.csdnimg.cn/img_convert/f62ea98c82d18b0a04e2faf4641aee39.png)

同一个IP,SNI指定为另一个域名:

![img](https://img-
blog.csdnimg.cn/img_convert/e10e5679fab431c13e5c1597f30db4e6.png)

返回的证书结果也是SNI对应的域名:

![img](https://img-
blog.csdnimg.cn/img_convert/f9b2eea5dff959b4c8b956f0c61b9219.png)

![img](https://img-
blog.csdnimg.cn/img_convert/0344a375b03fe40d2756046af595e1f5.png)

因此,作用和通过/etc/hosts指定某几个域名解析到同一个IP分别进行访问出现不同的结果存在异曲同工之处,此时校验的则是HTTP头部里的Host字段,TLS则可以通过SNI扩展来实现。

5.不检查证书有效性(–no-check-certificate)

此参数和curl的**-k参数,wget的 –no-check-certificate**参数作用类似,不检测证书有效性。

但也有所区别,区别在于sslscan加上此类参数,只是不输出**『输出结构』**中的第八部分证书信息,curl和wget命令的相关参数如果不加,如果证书无效,则直接报错无法往下进行,TLS握手都无法完成。

比如下面这个示例:

代码语言:bash

复制

sslscan --no-check-certificate <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/f60315ea1254b01e77402e02d38c0a51.png)

可以看到,不加一共输出76行,默认输出有效性等信息,加上此参数后一共输出68行,69-76行的证书信息全部省略。

6.显示服务端允许的客户端CA列表(–show-client-cas)

在HTTPS双向认证中使用,客户端校验服务端证书,服务端也校验客户端证书,此参数可以检测到服务端支持哪些客户端证书的CA机构。

以通过openssl自签的双向证书为例:

代码语言:bash

复制

sslscan --show-client-cas <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/a804f9204f2a283176c785e427eaf94c.png)

在最后的Acceptable client certificate CA names 部分可以看到服务端输出的允许的客户端CA列表。

需要注意的是,此参数对于IIS/Schannel服务器,将返回空,暂不支持此类场景。

7.输出支持的cipher完整列表(–show-ciphers)

–show-ciphers 将显示sslscan支持的密码的完整列表,目前有1200多个cipher。

代码语言:bash

复制

sslscan --show-ciphers <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/0766ac701940f4dc6eba0e305b5a568b.png)

以上只随机展示了30个ciphers,完整列表你可以重定向到文件或者通过more、less等命令慢慢翻看。

8.打印十六进制cipher ID(–show-cipher-ids)

此参数将显示服务器支持的加密套件的十六进制ID。这些ID是由IANA([Internet Assigned Numbers
Authority](https://cloud.tencent.com/developer/tools/blog-
entry?target=https%3A%2F%2Fiana.org%2F&source=article&objectId=2383594))分配的,用于唯一标识每个加密套件。

示例:

代码语言:bash

复制

sslscan --show-cipher-ids <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/bf641d5a0847d776a129c7a241aa7b5d.png)

第五列展示为cipher的十六进制ID。

以第一行的cipher:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
为例,你可以在[cipher套件网站](https://cloud.tencent.com/developer/tools/blog-
entry?target=https%3A%2F%2Fciphersuite.info%2Fcs%2FTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384%2F&source=article&objectId=2383594)找到它,并且也有显示套件的详细信息,16进制ID:

![img](https://img-
blog.csdnimg.cn/img_convert/9a9548d21a12f1032b56ea08def138c8.png)

和sslscan输出的16进制ID完全吻合。

9.输出IANA/RFC cipher名称(–iana-names)

默认情况下,sslscan输出的cipher名称都为OpenSSL 定义的名称,而IANA/RFC 则是另一套名称标准。

还是以第一个输出cipher为例,不加参数的cipher名称为:ECDHE-RSA-AES256-GCM-SHA384

![img](https://img-
blog.csdnimg.cn/img_convert/444747c267afd4c9e269c057d68364c3.png)

加上**–iana-names**的效果:

代码语言:bash

复制

sslscan --iana-names <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/2b31d13f99e4a70c8e84ecbecc472335.png)

名称从ECDHE-RSA-AES256-GCM-SHA384
变为了TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ,它们是同一个cipher,只不过不同标准的命名不一样。

输出十六进制ID,也是一样的:

![img](https://img-
blog.csdnimg.cn/img_convert/850cc6f655784f2d83043de672b903fa.png)

它们在ciphersuite.info中也有展示:

![img](https://img-
blog.csdnimg.cn/img_convert/e640662611ddb88ad4132860297777eb.png)

以及在openssl.org的[man文档](https://cloud.tencent.com/developer/tools/blog-
entry?target=https%3A%2F%2Fwww.openssl.org%2Fdocs%2Fman1.1.1%2Fman1%2Fciphers.html&source=article&objectId=2383594)中也有展示对应映射关系:

![img](https://img-
blog.csdnimg.cn/img_convert/25dee18ccd4a4c17dc79a67e824b8a58.png)

10.打印每次握手耗时(–show-times)

此参数将显示每次握手所花费的时间(以毫秒为单位)。需要注意,每个密码只发出一个请求,并且Client
Hello的大小不是恒定的,因此不适用于基准测试或性能测试中。

每个套件进行的握手时间都将会展示:

代码语言:bash

复制

sslscan --show-times <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/18ca7dff7076919e6b9bb3c6f5d837e9.png)

11.只检查是否支持特定版本的SSL/TLS(–ssl/–tls)

参数范围有如下表格:

参数含义
–ssl2只检查是否开启SSLv2
–ssl3只检查是否开启SSLv3
–tls10只检查是否开启TLS1.0
–tls11只检查是否开启TLS1.1
–tls12只检查是否开启TLS1.2
–tls13只检查是否开启TLS1.3
–tlsall只检查TLS1.0、TLS1.1、TLS1.2、TLS1.3

按需选择参数,不一一列举,以TLS1.1为例:

代码语言:bash

复制

sslscan --tls11 <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/7ad27707c7c758f1e040bf721eb845f7.png)

或者检测tls所有版本(默认行为),则是:

代码语言:bash

复制

sslscan --tlsall <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/150d8c0cddfe8c4565c680ed20a78181.png)

可以看到除了TLS1.3未启用,其它都是开启状态。

那么它是怎么判断哪些支持和不支持的呢?

通过抓包可以看到,sslscan在每个TLS握手阶段的ClientHello包里携带不同的的TLS版本,向服务端宣告客户端支持的TLS版本信息,每个版本都进行遍历,最终拿到能正常返回ServerHello的则视为对应版本的TLS协议是启用的:

![img](https://img-
blog.csdnimg.cn/img_convert/59f197056ee2e26fb136f69160d3bde1.png)

12.指定私钥文件/密码、客户端证书(–pk/–pkpass/–certs)

需要使用私钥进行SSL/TLS握手的场景,通过此参数指定私钥文件即可,–pk 即Private Key的含义,示例:

代码语言:bash

复制

sslscan --pk=xxx.key <目标>

当私钥有密码时,则通过**–pkpass**来指定密码:

代码语言:bash

复制

sslscan --pkpass=password <目标>

同理,在双向认证场景,需要指定客户端证书时,则为:

代码语言:bash

复制

sslscan --certs=client.pem <目标>
13.不检测指定部分的信息(–no-)

前面说过,sslscan不加任何参数时默认会扫描并展示8个部分的内容,如果不想扫描cipher套件信息,则可以加上**–no-
ciphersuites**参数:

代码语言:bash

复制

sslscan --no-ciphersuites <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/42f039611b2c624ed64e3ec0aa6e9e2b.png)

此时输出结果已经简略了不少。

同理,如下这些参数都能定义哪些信息不扫描,进而最大化节省扫描耗时:

参数含义
–no-ciphersuites不扫描加密套件信息
–no-fallback不扫描是否支持TLS Fallback
–no-renegotiation不检测是否支持TLS重协商
–no-compression不检测是否支持TLS压缩
–no-heartbleed不扫描是否存在OpenSSL心脏滴血漏洞
–no-groups不枚举密钥交换组
–no-cipher-details隐藏NIST EC曲线名称和EDH/RSA密钥长度

以上参数可以叠加使用,比如不扫描cipher套件信息、fallback、tls重协商、tls压缩、密钥交换组等,可以是:

代码语言:bash

复制

sslscan --no-ciphersuites --no-fallback --no-renegotiation --no-compression --no-heartbleed --no-groups <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/95fa2bba6b31cd43b15bba201df3ad5d.png)

此时输出结果已经简略了许多,只扫描想要的信息,大大提高了扫描速度。

14.以文件形式指定目标列表(–targets)

有多个目标需要扫描时,可将目标写入到一个文件内,一行一个,格式为host:port,不指定端口默认为443。

提到这,务必要说一下,很多人有一个误区:443一定是https、80端口一定是http
。这仅仅是作为默认端口的存在,可以任意指定没有限制,你理解的仅仅是默认,而非自定义端口。只要你乐意,HTTP可以是443,HTTPS可以是80,甚至可以是范围内的任何端口,比如URL为:[https://domain.com:8443](https://cloud.tencent.com/developer/tools/blog-
entry?target=https%3A%2F%2Fdomain.com%3A8443&source=article&objectId=2383594)、[http://domain.com:12345](https://cloud.tencent.com/developer/tools/blog-
entry?target=http%3A%2F%2Fdomain.com%3A12345&source=article&objectId=2383594),都是合法URL,重要的是这些端口在web服务器上的监听业务是HTTP还是HTTPS。

用法示例:

代码语言:bash

复制

$ cat dsthost
192.168.1.25
192.168.1.81
qcloud.com:443
google.com
$ sslscan --targets=dsthost

如果只想扫描指定的内容,比如只需要检测目的端支持的SSL/TLS版本,那么把前面提到过的不扫描参数加上,输出结果会简洁很多,扫描速度也会成倍增加:

代码语言:bash

复制

sslscan --no-ciphersuites --no-fallback --no-renegotiation --no-compression --no-heartbleed --no-groups --no-check-certificate --targets=<dsthost>

![img](https://img-
blog.csdnimg.cn/img_convert/416d2053e421ca3f02cceb5a5bbb9ede.png)

15.枚举服务器证书的签名算法(–show-sigs)

默认情况下不展示此部分内容,如需枚举服务器证书支持的签名算法,可加上此参数:

代码语言:bash

复制

sslscan --show-sigs <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/a7bfefdd7fde2e1b51913c9b9b147dbd.png)

同时,使用浏览器访问时,会显示TLS协商时使用的签名算法:

![img](https://img-
blog.csdnimg.cn/img_convert/cddc07783c20db56ee00737ebf0b1088.png)

16.启用SSL错误的解决方案(–bugs)

当SSL证书存在错误时,–bugs 可提供建议的解决方案:

代码语言:bash

复制

sslscan --bugs <目标>
17.设置socket超时时间(–timeout)

不指定的情况下默认是3秒,对于无法响应sslscan不理解的cipher套件很有效。

指定超时时间为1s,可以是:

代码语言:bash

复制

sslscan --tmeout=1 <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/e98c3dea12a2e14d7e31e67d1223b459.png)

18.设置初始超时时间(–connect-timeout)

当对端主机响应很慢的时候,不想等太长时间,则可通过此参数设定超时时间,不指定的情况下默认为75秒。

设置0.01秒和1秒为例:

代码语言:bash

复制

sslscan --connect-timeout=0.01 <目标>
sslscan --connect-timeout=1 <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/f40bf6d8f9af731cdc75b53235c61cd5.png)

可以看到,设置为0.01秒(10ms)时,sslscan报连接对端主机超时,时间太短连接无法成功建立起来,1秒的情况下则正常建联。以上仅作为极限的模拟测试,实际使用建议按需调整超时时间。

19.将输出结果报错为XML文件(–xml)

要将输出信息输出为xml格式文件时,可以是:

代码语言:bash

复制

sslscan --xml=file.xml <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/8662970aeffd653e459a6e7e45262d29.png)

此输出参数可以配合上面所讲的所有参数搭配使用,它不仅仅在屏幕上输出结果,也会将结果输出到指定的xml文件内。为什么需要导出XML的功能?因为有利于进行二次统计分析和检索,xml更为方便。

xml文件可以使用浏览器打开,或其它支持此格式文件的专用软件打开,或者上传到在线xml文档解析器上打开或进行其它文件格式的转换,比如
codebeautify.org/xmlviewer 支持解析xml并进行格式转换:

![img](https://img-
blog.csdnimg.cn/img_convert/2f50bbe132002049f8ed14477edfd737.png)

20.更为详细的输出(–verbose)

需要更详细的输出报告时,–verbose 正好符合,会尽可能详细的输出更多信息:

代码语言:bash

复制

sslscan --verbose <目标>

主要注意:

  • 不能使用-v替代,-v并不是–verbose的简写;
  • –verbose只能加一次,加多次效果如同加一次。

比如详细输出cipher套件的信息,但其它阶段的信息不需要:

代码语言:bash

复制

sslscan --verbose --no-fallback --no-renegotiation --no-compression --no-heartbleed --no-groups --no-check-certificate <目标>

![img](https://img-
blog.csdnimg.cn/img_convert/8e3508a72c48c62d54bf75672d36782e.png)

图中可以看到,多了一长串提示信息:SSL_get_current_cipher() returned NULL; this indicates that
the server did not choose a cipher from our list (ALL:COMPLEMENTOFALL:!ECDHE-
RSA-AES128-GCM-SHA256:!ECDHE-RSA-AES128-SHA256:!ECDHE-RSA-AES128-SHA:!ECDHE-
RSA-AES256-SHA:!ECDHE-RSA-AES256-GCM-SHA384:!ECDHE-RSA-
AES256-SHA384:!AES128-GCM-SHA256:!AES256-GCM-
SHA384:!AES128-SHA256:!AES128-SHA:!AES256-SHA256:!AES256-SHA)

在『前言』部分说过,黄色字体表示弱密码套件,通过详细的输出日志可以看到SSL_get_current_cipher
函数返回了一个空值,因为对端的cipher套件都不在上述这一长串的套件里,则认为是弱密码套件,字体标黄,SSL_get_current_cipher
函数返回NULL,SSL_connect 函数返回-1。

五、总结

sslscan作为业内一款强大的证书扫描工具,能够帮助我们检测 SSL/TLS
证书的版本信息、cipher套件、密钥交换组、证书颁发机构、OCSP服务器、证书有效期等等,对于确保网络安全和数据保护至关重要,在总结部分不一一列举。

sslscan的易用性使其成为网络安全专家的必备工具。其命令行界面简洁明了,参数丰富,可以根据用户的特定需求进行定制。无论是进行基本的服务器扫描,还是深入分析特定的密码套件或证书信息,都能提供强大的支持。期间也通过抓包分析了sslscan是如何拿到扫描结果。

总的来说,使用sslscan可以大大提升网站和应用程序的安全性,保护用户的敏感信息和隐私不被泄露,比如弱密码套件、过时的协议版本、证书吊销等,提前确认安全隐患,防患于未然。

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》

1.学习路线图

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/5bfb1d19a9094883a6b7b8fda185f4c0.png#pic_center)

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

![在这里插入图片描述](https://img-
blog.csdnimg.cn/61d8ca81402a4ab3988fa9f3708af459.png#pic_center)

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

![在这里插入图片描述](https://img-
blog.csdnimg.cn/c7b4f8009a644990b17b4ab5be3453d4.png#pic_center)

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

![在这里插入图片描述](https://img-
blog.csdnimg.cn/e772b987f7ab46c18dd20d1bfa4af5fa.jpeg#pic_center)

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在
信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

![在这里插入图片描述](https://img-
blog.csdnimg.cn/f5a170b6e07e4f4da1c6ec7637a935ac.png#pic_center)

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括
内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇

这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/8100c0280fb34ce89180a15303239d8e.png#pic_center)

题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

2023届全国高校毕业生预计达到1158万人,就业形势严峻;

国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。

网络安全行业特点

1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

img

2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
img

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值