Ich habe eine .p8-Datei-Download von Apples iOS-Entwickler-Portal für PushNotifications.Python Aufruf OpenSSL-Funktion segfaults
Ich versuche, die P8-Datei mit dem folgenden Code in Python zu laden:
from ctypes import *
OpenSSL = cdll.LoadLibrary("/opt/local/lib/libssl.1.0.0.dylib")
def loadPrivateKey(path):
bio = OpenSSL.BIO_new_file(path.encode("utf-8"), "rb".encode("utf-8"))
#pKey = OpenSSL.PEM_read_bio_PrivateKey(bio, None, None, None)
OpenSSL.BIO_free(bio)
def main():
loadPrivateKey("https://stackoverflow.com/users/Brandon/Desktop/APNsAuthKey.p8")
main()
es jedoch Störungen auf der Linie seg: OpenSSL.BIO_free(bio)
. Ich habe überprüft, ob Bio einen anderen Wert als 0 hat (tut es).
Wenn ich die gleiche Sache in C tun, es funktioniert:
struct EVP_PKEY* loadPrivateKey(const char* path)
{
struct BIO* bio = BIO_new_file(path, "rb");
struct EVP_PKEY* pKey = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
BIO_free(bio);
return pKey;
}
int main()
{
struct EVP_PKEY* pKey = loadPrivateKey("https://stackoverflow.com/users/Brandon/Desktop/APNsAuthKey.p8");
EVP_PKEY_free(pKey);
}
I in C überprüft haben, dass der Code funktioniert und ich habe es verwendet, um Daten zu unterzeichnen. Ich habe nicht in der Lage gewesen, das gleiche in Python3 zu tun, weil die BIO Befreiung mit Code Segfaults 11.
ich pyOpenssl
versucht habe, und es Segfaults auch wenn ich versuche, den Schlüssel mit loadprivatekey(FILETYPE_PEM, key)
zu lesen, in dem Schlüssel der Inhalt der P8-Datei .
Irgendwelche Ideen, warum es segfault wäre?
Welche Version von OpenSSL liefern Sie und welche Version von OpenSSL erwartet Python? OpenSSL 1.0.2 und OpenSSL 1.1.0 sind * nicht * binärkompatibel. – jww
@ jww; Ich habe es gelöst. Nach dem Versuch für Stunden .. Es stellt sich heraus, dass Sie die Typen angeben müssen und die Typen müssen eine perfekte Übereinstimmung sein. Sonst schlägt es fehl. Aus irgendeinem seltsamen Grund "pyOpenSSL" segfaults, obwohl es 'ffi' verwendet. Am Ende habe ich die Lösung verwendet, die ich gepostet habe, da keine der Third-Party-Bibliotheken atm arbeitet und ich keine andere Lösung finden kann. – Brandon