如何在 tls 握手期间验证客户端证书

时间:2021-05-28 05:09:15

标签: ssl openssl

我通过以下命令创建了一个 tls 服务器,它将请求正在连接的客户端提供客户端证书。我还使用 openssl 命令行模拟了一个客户端,它将提供一个客户端证书。但似乎服务器没有检查客户端证书是否正是我们想要的。你知道如何让服务器做检查吗?

对于服务器:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
openssl s_server -key key.pem -cert cert.pem -accept 44330 -Verify 0

对于客户:

openssl req -x509 -newkey rsa:2048 -keyout clientkey.pem -out clientcert.pem -days 365 -nodes
openssl s_client -connect 127.0.0.1:44330 -cert clientcert.pem -key clientkey.pem

1 个答案:

答案 0 :(得分:1)

<块引用>

...检查客户端证书是否正是我们想要的

您没有从客户端证书中指定您想要的内容,这就是它无法检查它的原因。如果您希望客户端证书由特定 CA 签名,请使用 -CAfile 选项 as documented

<块引用>

-CAfile infile
包含在客户端身份验证期间使用和尝试构建服务器证书链时使用的受信任证书的文件。该列表还用于请求证书时传递给客户端的可接受客户端 CA 列表。

因此,如果您想确保客户端证书是您颁发的自签名证书(或由此签名的其他证书),请使用:

 openssl s_server -key key.pem -cert cert.pem -accept 44330 -Verify 0 \
   -CAfile clientcert.pem