客户端模式下的 Openssl:验证身份验证

客户端模式下的 Openssl:验证身份验证

我想用 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:

  1. 客户端问候
  2. 服务器 Hello、证书、服务器密钥交换、服务器 Hello 完成
  3. 客户端密钥交换
  4. 更改密码规范
  5. 加密握手消息
  6. 更改密码规范
  7. 加密握手消息

为什么在两种情况下连接都会成功,尽管服务器应该拒绝没有证书的客户端?步骤 3 是否表示客户端的证书已呈现给服务器?如何让 openssl 根本不发送证书?

答案1

由于服务器配置错误,因此从未发送证书请求。

如果一切正确,那么CertificateRequest在 期间应该有一个ServerHello。第 2 步应如下所示:

  1. 服务器问候、证书、服务器密钥交换、证书请求、服务器问候完成

相关内容