gpt4 book ai didi

c++ - QSslCertificate 如何获取 Windows 中显示的公钥

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:11 24 4
gpt4 key购买 nike

在 Chrome 中查看证书详细信息时,Windows 显示的给定证书的公钥与 Qt 在连接到加密信号的插槽中返回的不同。

auto onEncrypt = [](QNetworkReply* rpl) {
auto cert = rpl->sslConfiguration().peerCertificate();
auto publicKey = cert.publicKey();

QString winHexKey = "3082010a0282010100d8..."; // as displayed in cert info of Chrome on Windows for the Public Key
auto windowsKey = QByteArray::fromHex(winHexKey.toUtf8());
if (windowsKey == publicKey.toPem())
std::cout << "PEM key matched\n";
else if (windowsKey == publicKey.toDer())
std::cout << "DER key matched\n";
else if (winHexKey == publicKey.toPem().toHex())
std::cout << "Hex PEM key matched\n";
else if (winHexKey == publicKey.toDer().toHex())
std::cout << "Hex DER key matched\n";
else
std::cout << "No match!\n";
std::cout << publicKey.toPem().toHex().toStdString() << '\n'; // 902 characters worth starting with 2d2d2d2d2d
};
QNetworkAccessManager mgr;
QObject::connect(&mgr, &QNetworkAccessManager::encrypted, onEncrypt);
QNetworkRequest r(QUrl::fromUserInput("https://www.qt.io"));
mgr.get(r);

总是导致不匹配。有趣的是,公钥的十六进制输出比 Windows 显示的要大得多。

如何获取服务器提供的证书的公钥,并根据证书中的内容进行验证?

最佳答案

How can one get the public key of the certificate presented by the server

公钥是证书的一部分。该证书还将包含哈希值,这可以对证书内容进行一些基本的完整性检查。要检查服务器是否确实与证书匹配,您必须尝试建立加密 channel 。服务器以与从客户端观察到的证书一致的方式引导加密 channel ——也就是说,服务器与为其提供的证书相匹配;或者它没有——这是引起 panic 的原因。

verify it against what is present in the certificate?

X.509 证书还包含哈希值,可用于完整性检查。

Chrome 显示的内容与您的代码执行的内容之间的差异在于 Chrome 解码了 PEM/DER/BER。 DER/BER 添加一些额外的元数据来描述字段类型和长度等内容; PEM 是底层 X.509 证书内容的特定编码。

关于c++ - QSslCertificate 如何获取 Windows 中显示的公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42796955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com