使OpenSSL服务器仅接受来自已经具有服务器公共证书的客户端的连接

时间:2018-11-30 15:52:51

标签: c++ openssl

我仍在学习使用OpenSSL在C ++中进行编程,并尝试在客户端启动与服务器的连接的位置进行构建和应用。我有

  1. 使用OpenSSL(如.pem)生成证书/密钥对
  2. 在服务器初始化中称为SSL_use_certificate_file / PrivateKey_file
  3. 将服务器的证书与客户一起存储,并在尝试连接到服务器时在客户端验证证书

我注意到,即使我向客户端传递了不正确的证书并且(正确)失败了,连接仍然继续进行,并且客户端和服务器继续执行原本应该执行的操作。

我想问的是,

  1. 我使用证书的方式有问题吗?
  2. 如果客户端没有服务器的证书,如何使连接失败?

1 个答案:

答案 0 :(得分:1)

您似乎有设计缺陷。

服务器证书的目的是保护客户端。如果控制客户端,则应该使用(检测到的)失败来中止来自客户端的连接。

如果您控制客户端,但需要信任它,则需要使用 client 证书。这些很少见,但在HTTPS底层的SSL / TLS协议中绝对允许。客户端证书的作用是相反的:当服务器检测到客户端证书失败时,服务器可以断开连接。