openssls_client命令大全:常用参数与选项解析(强调工具性,适合搜索命令的用户)

openssl s_client 命令大全:常用参数与选项解析

openssl s_client 是 OpenSSL 软件包中一个强大的命令行工具,它主要用于诊断和调试 SSL/TLS 连接。它可以模拟一个 SSL/TLS 客户端,连接到远程服务器并显示与握手过程、证书信息以及加密细节相关的大量信息。对于需要排查 SSL/TLS 连接问题、验证证书配置、测试加密套件支持情况以及理解 SSL/TLS 工作原理的用户来说,openssl s_client 是一个不可或缺的工具。

一、基本用法

openssl s_client 的基本语法如下:

bash
openssl s_client -connect host:port [options]

  • host:port: 指定要连接的远程服务器的主机名和端口号。例如 www.example.com:443

二、常用参数与选项

以下是一些最常用的参数和选项,按功能分类进行说明:

1. 连接与协议控制

  • -connect host:port: 这是最基本的选项,用于指定要连接的服务器和端口。
  • -servername hostname: 通过服务器名称指示 (SNI) 指定要连接的服务器的主机名。这对于使用 SNI 的虚拟主机配置非常重要。
  • -tls1_3, -tls1_2, -tls1_1, -tls1, -ssl3: 强制使用特定的 TLS/SSL 协议版本。例如,-tls1_2 会强制使用 TLS 1.2。请注意,-ssl3 通常不应该使用,因为它已经不安全。
  • -no_tls1_3, -no_tls1_2, -no_tls1_1, -no_tls1, -no_ssl3: 禁用特定的 TLS/SSL 协议版本。
  • -dtls, -dtls1, -dtls1_2: 使用 DTLS 协议(基于 UDP 的 TLS)。
  • -starttls protocol: 使用 STARTTLS 协议升级连接。protocol 可以是 smtp, pop3, imap, ftp, xmpp, xmpp-server, postgresql, mysql, lmtp, nntp, sieve, ldap, ldap+tls, proxy, postgres, mysql 等。
  • -quiet: 减少输出信息,只显示证书链。

2. 证书与密钥

  • -cert certfile: 指定客户端证书文件(PEM 格式)。
  • -key keyfile: 指定客户端私钥文件(PEM 格式)。
  • -certform {PEM|DER}: 指定客户端证书的格式 (默认是 PEM)。
  • -keyform {PEM|DER|ENGINE}: 指定客户端私钥的格式 (默认是 PEM)。
  • -pass arg: 指定私钥的密码。arg 的格式可以参考 openssl 命令的 pass phrase arguments 部分。
  • -CAfile CAfile: 指定用于验证服务器证书的 CA 证书文件(PEM 格式)。
  • -CApath dir: 指定用于验证服务器证书的 CA 证书目录。该目录必须使用 c_rehash 工具进行预处理。
  • -verify depth: 设置证书链验证的深度。默认深度为 9。
  • -verify_return_error: 即使验证失败也继续连接,并返回验证错误。
  • -no_verify: 不验证服务器证书。警告:这会带来安全风险,仅用于测试目的。

3. 加密与安全

  • -cipher cipherlist: 指定要使用的加密套件列表。可以使用 openssl ciphers 命令查看支持的加密套件。例如,-cipher 'AES256-SHA'
  • -crlf: 发送 CRLF 作为行尾符,这对于某些协议(如 SMTP)是必要的。
  • -enable_middlebox_compat: 启用中间盒兼容模式,发送一个假的 Change Cipher Spec 消息,以提高与某些设备的兼容性。
  • -ssl_config section_name: 允许你在 openssl 配置文件中,为 s_client 配置单独的 section。这样可以避免命令行过长。

4. 输出与调试

  • -showcerts: 显示服务器发送的所有证书。
  • -prexit: 在完成握手后打印出 SSL 会话参数并退出。
  • -state: 打印 SSL 握手的状态信息。
  • -debug: 打印详细的调试信息,包括所有发送和接收的字节。
  • -msg: 显示所有协议消息的十六进制转储。
  • -trace: 更详细的握手信息跟踪。
  • -status: 请求 OCSP 证书状态并将其打印出来.
  • -nextprotoneg protocol_list: 启用并设置 NPN 协议列表(逗号分隔)。
  • -alpn protocol_list: 启用并设置 ALPN 协议列表(逗号分隔)。
  • -curves curve_list: 指定支持的椭圆曲线列表(冒号分隔),例如 P-256:P-384

5. 其他常用选项

  • -proxy hostname:port: 使用 HTTP 代理进行连接。
  • -ign_eof: 忽略 EOF 错误,持续读取输入。
  • -brief: 只显示连接所使用的 SSL/TLS 版本和加密套件,以及服务器证书的信息。
  • -engine id: 指定要使用的硬件引擎。可以使用 openssl engine 命令查看支持的引擎。

三、应用场景示例

1. 测试与 www.example.com:443 的连接:

bash
openssl s_client -connect www.example.com:443

2. 使用 TLS 1.2 连接并指定 SNI:

bash
openssl s_client -connect www.example.com:443 -tls1_2 -servername www.example.com

3. 验证证书链并显示所有证书:

bash
openssl s_client -connect www.example.com:443 -showcerts -verify 9

4. 使用 STARTTLS 升级 SMTP 连接:

bash
openssl s_client -connect mail.example.com:25 -starttls smtp

5. 使用指定的加密套件进行连接:

bash
openssl s_client -connect www.example.com:443 -cipher 'ECDHE-RSA-AES256-GCM-SHA384'

6. 检查服务器是否支持 TLS 1.3:

bash
openssl s_client -connect www.example.com:443 -tls1_3

7. 检查并显示 OCSP 状态:

bash
openssl s_client -connect www.example.com:443 -status

8. 测试 HTTP/2 支持 (通过 ALPN):

bash
openssl s_client -connect www.example.com:443 -alpn h2

四、总结

openssl s_client 是一个功能强大的工具,可用于诊断、调试和测试 SSL/TLS 连接。通过灵活运用其丰富的参数和选项,可以满足各种不同的测试需求。本文档提供了常用选项的详细解释和示例,可以帮助用户快速找到所需的命令,并更有效地使用 openssl s_client 工具。建议用户结合 openssl 官方文档进行深入学习,并根据实际需求进行灵活运用。记住,在使用 openssl s_client 进行连接测试时,尤其需要注意潜在的安全风险,例如使用 -no_verify 选项时,应该仅在受信任的测试环境中使用。

THE END