我正在尝试在我的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."
有什么想法吗?
答案 0 :(得分:1)
尝试使用Qt&lt; 5.6喜欢Qt 5.5。
在Qt 5.6中,Mac OS平台上的默认SSL后端已从OpenSSL更改为Secure Transport。
答案 1 :(得分:0)
用这种东西将头撞到墙上几次后,我发现了一条很好的捷径。
我将证书导入Windows计算机(确保将私钥标记为可导出)并验证证书路径在证书管理器中是否有效。如果我需要导入证书,我会在此处执行,直到颁发的证书路径良好为止。完成此操作后,我将证书和私钥重新导出到新的PKCS12文件中,包括根证书和中间证书。这会生成一个可以导入ASA或IOS路由器的单个文件,并且可以完美地工作,因为单元需要的所有内容都存在于一个文件中。
确保在导出证书集后从Windows计算机中删除证书。
也许这个链接会帮助你:
答案 2 :(得分:0)
QSslCertificate :: importPkcs12()将返回“未实现的代码”。在macOS或iOS平台上运行,因为这些Qt套件已配置为使用安全传输而不是OpenSSL。
为了充分利用这两方面的优势,我发现可以将其Qt套件配置为安全传输,但是同时链接到OpenSSL以实现importPkcs12的OpenSSL特定实现。
以下是一个片段,我们在其中打开了针对macOS和iOS的自定义实现:
#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必备软件,请参阅此处: