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

时间:2014-05-19 18:57:29

标签: c++ qt https openssl

我试图解决这个问题超过一天甚至一周。 我请你至少给我一个想法或解决方案。请不要给我链接到文档,我已经了解它。 现在的问题是:

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

在这种情况下,我使用const键和证书。我希望收到有关客户端证书的信息,并根据连接的不同密钥和证书进行安装。

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

我尝试使用peer Certificate()的方法,但返回void。

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

1 个答案:

答案 0 :(得分:1)

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

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

在OpenSSL中实现SNI并非易事,但有一些示例和stackoverflow questions需要帮助。