2016-09-08 49 views
17

Próbuję rozpakować plik pkcs12 w mojej aplikacji Qt - ale bez powodzenia. Buduję aplikację konsolową Qt Console (GUI wyłączony).QSslCertificate :: importPkcs12 nie może przetworzyć pliku PFX

(ja po tej instrukcji: https://github.com/trueos/sysadm-ui-qt/blob/master/src-qt5/gui_client/SSLNotes.txt)

tworzenie pkcs12 polecenia:

"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" 

Kod 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; 

Ręczne wydobycie klucza oraz plik pracowałem przy użyciu poleceń openssl. Wiadomość

Błąd:

"Unimplemented Code." 

Jakieś pomysły?

+1

Jakiego błędu dostałeś? Czy możesz opisać "nie ma szczęścia"? – vcsjones

+0

"Unimplemented code" and "false" ... qDebug() << import zwraca false. –

+0

Jaką wersję Qt używasz? 'importPkcs12' został wprowadzony w Qt 5.4. – vcsjones

Odpowiedz

0

Po tym, jak kilka razy uderzyłem głową o ścianę, znalazłem dobry skrót.

Zaimportuję certyfikat na komputer z systemem Windows (upewniając się, że klucz prywatny jest oznaczony jako możliwy do wyeksportowania) i sprawdzając, czy ścieżka certyfikatu jest poprawna w menedżerze certyfikatów. Jeśli muszę zaimportować certyfikaty, robię to tutaj, dopóki wydana ścieżka certyfikatu nie jest dobra. Po wykonaniu tej czynności ponownie wyeksportuję certyfikat i klucz prywatny do nowego pliku PKCS12, w tym certyfikatu głównego i pośredniego. W ten sposób powstaje pojedynczy plik, który można zaimportować do routera ASA lub IOS i działa bezbłędnie, ponieważ wszystko, czego potrzebuje jednostka, znajduje się w jednym pliku.

Pamiętaj, aby usunąć certyfikat z komputera z systemem Windows po zakończeniu eksportowania zestawu certyfikatów.

Może ten link pomoże Ci się:

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

1

Spróbuj użyć Qt < 5.6 jak Qt 5.5.

W Qt 5.6 domyślny backend SSL został zmieniony z OpenSSL na bezpieczny transport na platformie Mac OS.

Ten problem został już wypełniony jako błąd: https://bugreports.qt.io/browse/QTBUG-56596