首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >QSslCertificate::importPkcs12 Pkcs12无法解析PFX文件

QSslCertificate::importPkcs12 Pkcs12无法解析PFX文件
EN

Stack Overflow用户
提问于 2016-09-08 22:49:24
回答 3查看 1.5K关注 0票数 17

我试图在我的Qt应用程序中解压我的pkcs12文件--但是没有成功。我正在构建一个Qt控制台应用程序(图形用户界面禁用)

(我已经关注了这个指南:https://github.com/trueos/sysadm-ui-qt/blob/master/src-qt5/gui_client/SSLNotes.txt)

Pkcs12创建命令:

代码语言:javascript
复制
"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码:

代码语言:javascript
复制
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命令手动提取密钥和文件。

错误消息:

代码语言:javascript
复制
"Unimplemented Code."

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2017-03-03 19:18:59

尝试使用Qt < 5.6,就像Qt 5.5。

在Qt5.6中,默认的SSL后端在Mac平台上从OpenSSL更改为Secure Transport。

这个问题已经被填充为错误:https://bugreports.qt.io/browse/QTBUG-56596

票数 1
EN

Stack Overflow用户

发布于 2016-09-19 00:10:36

在用这种东西把我的头撞到墙上几次之后,我找到了一个很好的捷径。

我将证书导入Windows计算机(确保私钥被标记为可导出),并在证书管理器中验证证书路径是否有效。如果我需要导入证书,我会在这里执行,直到颁发的证书路径正确为止。完成后,我将证书和私钥重新导出到一个新的PKCS12文件中,包括根证书和中间证书。这会生成可导入到ASA或IOS路由器中的单个文件,并且可以完美地工作,因为设备需要的所有内容都存在于一个文件中。

确保在导出完证书集后从Windows计算机中删除该证书。

也许这个链接能帮到你:

摘自:https://supportforums.cisco.com/discussion/12347971/failed-parse-or-verify-imported-certifiate-asa-5505-831

票数 0
EN

Stack Overflow用户

发布于 2019-10-17 13:02:09

QSslCertificate::return Pkcs12()将返回“未实现的代码”。在macOS或iOS平台上,因为这些Qt工具包被配置为使用安全传输而不是OpenSSL。

为了两全其美,我发现可以将他们的Qt工具包配置为安全传输,但同时链接到OpenSSL以实现特定于importPkcs12的OpenSSL实现。

以下是我们为macOS和iOS打开自定义实现的一段代码:

代码语言:javascript
复制
#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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39394029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档