我想用 openssl (v. 1.0.1e) 测试我的安全服务器实现。我使用客户端模式下的 openssl 连接到服务器:
openssl s_client -cert client.pem -connect localhost:8888 -debug
这成功了,我看到 SSL 握手已经发生。
服务器配置为拒绝任何未提供证书的客户端。我使用上述命令时没有使用开关-cert
,但与服务器的连接已成功建立。
文档指定:
-证书证书名称
如果服务器请求证书,则使用证书。默认不使用证书。
在 wireshark (v. 1.8.10) 跟踪中,我看到两种情况(即有和没有交换机-cert
)包含相同的步骤。协议是 TLSv1:
- 客户端问候
- 服务器 Hello、证书、服务器密钥交换、服务器 Hello 完成
- 客户端密钥交换
- 更改密码规范
- 加密握手消息
- 更改密码规范
- 加密握手消息
为什么在两种情况下连接都会成功,尽管服务器应该拒绝没有证书的客户端?步骤 3 是否表示客户端的证书已呈现给服务器?如何让 openssl 根本不发送证书?
答案1
由于服务器配置错误,因此从未发送证书请求。
如果一切正确,那么CertificateRequest
在 期间应该有一个ServerHello
。第 2 步应如下所示:
- 服务器问候、证书、服务器密钥交换、证书请求、服务器问候完成