QSslCertificate::importPkcs12 无法解析 PFX 文件

问题描述 投票:0回答:2

我正在尝试在 Qt 应用程序中解压我的 pkcs12 文件 - 但没有运气。我正在构建一个Qt 控制台应用程序(GUI 已禁用)

(我已遵循本指南:https://github.com/trueos/sysadm-ui-qt/blob/master/src-qt5/gui_client/SSLNotes.txt

Pkcs12创建命令:

"openssl req -newkey rsa:2048 -nodes -keyout test_key.pem"
"openssl req -key test_key -new -x509 -out test_crt.crt"
"openssl pkcs12 -inkey test_key.pem -in test_crt.crt -export -passout stdin -out new.pfx"

Qt代码:

QString password="1234";
QFile pkcs("/Users/test/Desktop/certs/new.pfx");
pkcs.open(QFile::ReadOnly);
QSslKey key;
QSslCertificate cert;
QList<QSslCertificate> imported_certs;
static bool import=QSslCertificate::importPkcs12(&pkcs,&key,&cert,&imported_certs,QByteArray::fromStdString(password.toStdString()));

pkcs.close();
qDebug()<<import;

使用 openssl 命令手动提取密钥和文件已成功。

错误信息:

"Unimplemented Code."

有什么想法吗?

qt sockets ssl openssl pkcs#12
2个回答
1
投票

尝试使用 Qt < 5.6 like Qt 5.5.

在 Qt 5.6 中,默认 SSL 后端从 OpenSSL 更改为 Mac OS 平台上的安全传输。

此问题已作为 Bug 填写:https://bugreports.qt.io/browse/QTBUG-56596


0
投票
平台 SSL 库 导入Pkcs12
Windows、Linux、安卓 OpenSSL 支持
macOS、iOS 安全运输 未实现的代码

上表应该可以让您了解为什么在 macOS、iOS 上调用

QSslCertificate::importPkcs12
时会收到“未实现的代码”。

对于 macOS、iOS,您必须使用“安全传输”SSL 库,否则您可能无法将应用程序提交到 App Store。

[编辑]这个答案是旧的,基于 Qt5.15.x,尚未针对 Qt6.x 进行测试。

此答案基于将“安全传输”保留为默认 SSL 库,但也静态链接 OpenSSL 库的部分,以便您可以获得 importPkcs12() 功能。

下面为您提供了 importPkcs12() 的黑盒包装器,它根据您所在的平台在两者之间切换。

#ifdef Q_OS_IOS
#define IMPORTPKCS12_OPENSSL
#endif
#ifdef Q_OS_MACOS
#define IMPORTPKCS12_OPENSSL
#endif

bool ImportPkcs12Patch::importPkcs12(QIODevice *device, QSslKey *key, QSslCertificate *certificate, QList<QSslCertificate> *caCertificates, const QByteArray &passPhrase)
{
#ifdef IMPORTPKCS12_OPENSSL
    return importPkcs12_openssl(device, key, certificate, caCertificates, passPhrase );
#else
    return QSslCertificate::importPkcs12(device, key, certificate, caCertificates, passPhrase );
#endif
}

有关完整的工作示例,请参阅此处的示例:

https://github.com/stephenquan/QtImportPKCS12

要为 iOS 和 macOS 构建 OpenSSL 先决条件,请参阅此处:

https://github.com/stephenquan/build_openssl

© www.soinside.com 2019 - 2024. All rights reserved.