如何获取有关客户端证书的信息

How to get information about the client certificate?

本文关键字:客户端 证书 信息 何获取 获取      更新时间:2023-10-16

我试图解决这个问题超过一天甚至一个星期。我请求你至少给我一个主意或解决办法。请不要给我链接的文件,我已经学会了它的心。现在的问题是:

QSslSocket * server = new QSslSocket();
server->setPrivateKey("my.key");
server->setLocalCertificate("my.crt");
server->startServerEncryption();
if(server->waitForEncrypted()) {
   ...
}

在本例中,我使用了一个const密钥和证书。我希望收到客户端证书的信息,并根据连接的不同密钥和证书进行安装。

例如,客户端使用相同的证书,我使用与此证书对应的密钥。

我试图使用对等证书()的方法,但返回无效。

如何获取客户端使用的证书信息?也许有办法拿到这张证书。怎么做呢?

在TLS协议中,服务器在客户端之前提供它的证书/身份,因此没有(标准的)方法来根据客户端证书选择提供哪个服务器证书。一旦客户端提供了它的身份,服务器证书就已经被锁定了。

我能想到的唯一的TLS扩展,你可以使用/滥用你正在谈论的是SNI,它会让客户端请求自己选择的主机名(即客户端a请求cert_a.myserver.com的响应,客户端B请求cert_b.myserver.com等)之前,服务器呈现其证书,所以服务器可以使用该信息来选择证书呈现。

在OpenSSL中实现SNI不是一项微不足道的任务,但是有一些示例和stackoverflow问题可以查看以获得帮助。