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

C++ 如何获取有关客户端证书的信息?,c++,qt,https,openssl,C++,Qt,Https,Openssl,我花了一天甚至一周的时间试图解决这个问题。 我要求你至少给我一个想法或解决方案。请不要给我文档的链接,我已经记住了。 现在的问题是: QSslSocket * server = new QSslSocket(); server->setPrivateKey("my.key"); server->setLocalCertificate("my.crt"); server->startServerEncryption(); if(server->waitForEncrypte

我花了一天甚至一周的时间试图解决这个问题。 我要求你至少给我一个想法或解决方案。请不要给我文档的链接,我已经记住了。 现在的问题是:

QSslSocket * server = new QSslSocket();
server->setPrivateKey("my.key");
server->setLocalCertificate("my.crt");
server->startServerEncryption();
if(server->waitForEncrypted()) {
   ...
}
在本例中,我使用const密钥和证书。我希望接收有关客户端证书的信息,并根据连接的不同密钥和证书进行安装

例如,客户端使用的是同一个证书,而我使用的是与此证书对应的密钥

我尝试使用对等证书()的方法,但返回void


如何获取客户使用的证书的相关信息。也许有办法拿到这个证书。如何执行此操作?

在TLS协议中,服务器在客户端之前提交其证书/标识,因此没有(标准)方法根据客户端证书选择要提交的服务器证书。一旦客户端显示其身份,服务器证书就已经被锁定

我能想到的唯一一个TLS扩展可以用于/滥用您正在谈论的内容是,它允许客户端在服务器提交其证书之前请求自己选择的主机名(即客户端a请求对cert_a.myserver.com的响应,客户端B请求cert_B.myserver.com等),因此,服务器可以使用该信息选择要显示的证书


在OpenSSL中实现SNI不是一个简单的任务,但有一些样本并需要帮助。

如果你加上一个减法,请解释他们的动作。标题需要更好——你问的实际问题。@安迪我添加了标签Python,健壮的是那些知道C++的坏程序员会帮助我。解决方案或想法不依赖于语言。@MichaelPetrotta你有解决问题的想法吗?@tioo:遗憾的是,许多人不费心解释。我想他们是因为原来的标题有点不合适而投了反对票。话虽如此,你问的问题还是有点不清楚。您想阅读哪些文档?(Fwiw,我没有否决)我不知道如何在Qt上翻译这些示例。@tioo我认为在客户端,您只需使用所需的主机名调用
QSslSocket::SetpeerveryName
,就可以将其用作SNI的所需主机名。客户端是一个安装了站点证书的浏览器。我没有访问源的权限,但它应该发送所需的数据。问题是如何获得所需的数据?