Debian OpenSSL 客户端配置步骤
一 安装与准备
- 在 Debian 上安装 OpenSSL 工具:sudo apt update && sudo apt install openssl。
- 确认 OpenSSL 配置文件路径:执行 openssl version -a,在输出中查看 OPENSSL_CONF 字段(常见为 /etc/ssl/openssl.cnf)。
- 准备证书文件:
- 单向 TLS:仅需信任的 CA 证书/证书链(如服务器证书由公共 CA 签发,可使用系统 CA 包;自签名或私有 CA 需指定 -CAfile)。
- 双向 TLS(mTLS):还需客户端证书 client.crt 与私钥 client.key,且服务器侧需配置信任你的 CA。
- 建议将证书与私钥放在受保护目录(如 ~/.certs/),并设置权限:chmod 600 client.key;chmod 644 client.crt。
二 生成客户端证书与私钥(用于 mTLS)
- 快速生成自签名客户端证书(测试用):
openssl req -newkey rsa:2048 -nodes -keyout client.key -x509 -days 365 -out client.crt -subj “/CN=client”
- 生产环境推荐由私有/企业 CA 签发:
- 生成私钥:openssl genpkey -algorithm RSA -out client.key -aes256
- 生成 CSR:openssl req -new -key client.key -out client.csr
- 用 CA 签发:openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt
- 证书扩展建议(用于客户端身份):在 [v3_req] 中加入 keyUsage = digitalSignature, keyEncipherment,extendedKeyUsage = clientAuth,并按需添加 subjectAltName。
三 使用 OpenSSL s_client 测试连接
- 基本连接与握手查看:
openssl s_client -connect www.example.com:443
- 指定协议与套件:
openssl s_client -connect www.example.com:443 -tls1_3 -cipher AES256-GCM-SHA384
- 单向验证(信任服务器证书):
openssl s_client -connect www.example.com:443 -CAfile /path/to/ca-bundle.crt -verify_return_error
- 双向验证(mTLS,携带客户端证书与私钥):
openssl s_client -connect www.example.com:443 -cert client.crt -key client.key -CAfile /path/to/ca.crt
- 将握手与证书信息保存到文件便于排查:
openssl s_client -connect www.example.com:443 -servername www.example.com > handshake.log 2>&1
- 提示:遇到证书不受信任或链不完整时,优先检查 -CAfile 是否指向正确的 根/中间 CA。
四 在常见应用中的客户端配置
- curl(mTLS 示例):
curl --cacert /path/to/ca-bundle.crt --cert client.crt --key client.key https://example.com
- wget(mTLS 示例):
wget --ca-certificate=/path/to/ca-bundle.crt --certificate=client.crt --private-key=client.key https://example.com
- 环境变量方式(部分程序会读取):
export SSL_CERT_FILE=/path/to/client.crt
export SSL_KEY_FILE=/path/to/client.key
- 说明:不同应用可能使用不同的证书/密钥选项名或配置文件路径,请以具体程序文档为准。
五 常见问题与排查
- 证书不受信任或链不完整:使用 -CAfile 指定正确的 根/中间 CA;必要时添加 -verify_return_error 让验证失败立即返回错误。
- 协议/套件不匹配:用 -tls1_2 / -tls1_3 指定版本,用 -cipher 指定套件,结合服务端支持的协议与套件进行调整。
- SNI 问题:访问同一 IP 托管的多域名时,添加 -servername your.domain 以发送正确的 SNI。
- 配置不生效:确认证书与私钥路径、权限(私钥 600),以及是否使用了正确的 CA 文件。
- 深入排查:将输出重定向到日志文件(如 handshake.log),检查握手、证书链与验证结果。