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
选项时,应该仅在受信任的测试环境中使用。