Ошибки PyCrypto с файлом .p12 из консоли разработчика Google

Я пытаюсь внедрить Google Identity Toolkit (gitkitv3) в GAE Python. После того, как пользователь входит на сайт, я получаю следующие ошибки:

'PKCS12 format is not supported by the PyCrpto library. '
NotImplementedError: PKCS12 format is not supported by the PyCrpto library. Try converting to a "PEM" (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem) or using PyOpenSSL if native code is an option.

Основываясь на ответе SO, я выполнил следующие команды в своем файле x.p12 и вместо этого использовал сгенерированный файл privatekey.pem. :

openssl pkcs12 -passin pass:notasecret -in x.p12 -nocerts -passout pass:notasecret -out key.pem 
openssl pkcs8 -nocrypt -in key.pem -passin pass:notasecret -topk8 -out privatekey.pem

Теперь я получаю следующую ошибку:

'X509 certs are not supported by the PyCrypto library. '
NotImplementedError: X509 certs are not supported by the PyCrypto library. Try using PyOpenSSL if native code is an option.

Я загрузил x.p12 из консоли разработчика Google. Как исправить эту ошибку? Пожалуйста помоги


КАКОЕ РЕШЕНИЕ?

Мне обязательно нужен этот файл .p12 или я могу скопировать его содержимое в глобальную переменную и использовать его (как обходной путь)? Может ли кто-нибудь объяснить мне фактическое использование этого файла?


ОБНОВЛЕНИЕ
Похоже, что библиотека PyCrypto, предоставляемая Google, крайне ограничена и не поддерживает X509.


person gsinha    schedule 29.08.2014    source источник
comment
stackoverflow.com/questions/17993604 /   -  person Ryan    schedule 29.08.2014
comment
@Bruyere Спасибо, но я уже пробовал это, и это не сработало.   -  person gsinha    schedule 29.08.2014
comment
Включая удаление слушателя -----НАЧАТЬ ЧАСТНЫЙ КЛЮЧ----- ?   -  person Ryan    schedule 29.08.2014
comment
@Bruyere Я попробовал это сейчас, и у меня появилась первая ошибка, упомянутая выше NotImplementedError: PKCS12 format is not supported by the PyCrpto library..   -  person gsinha    schedule 30.08.2014
comment
PyCrypto вообще не поддерживает сертификаты X.509. Вы все равно можете загрузить их, как указано здесь: stackoverflow.com/questions/12911373/. Имейте в виду, что закрытый ключ не является сертификатом x.509 (который включает в себя открытый ключ). Однако неясно, что нужно вашему коду.   -  person SquareRootOfTwentyThree    schedule 31.08.2014
comment
@SquareRootOfTwentyThree Спасибо за ваше предложение. Я просмотрел вопрос и ваш ответ. Я не могу понять, в каких местах и ​​что все изменить самостоятельно, так как мне не нравится код в oauth2client/crypt.py.   -  person gsinha    schedule 31.08.2014
comment
@SquareRootOfTwentyThree Я попробовал ваше решение, но получаю несколько новых ошибок   -  person gsinha    schedule 01.09.2014
comment
@gsinha Вы извлекли сертификат X509 с помощью такой команды, как openssl pkcs12 -clcerts -nokeys -in mycert.p12 -out usercert.pem? Можете ли вы разместить сертификат где-нибудь?   -  person SquareRootOfTwentyThree    schedule 01.09.2014
comment
@SquareRootOfTwentyThree Я получил настоящий .pem от: openssl pkcs12 -in <key.p12> -nocerts -passin pass:notasecret -nodes -out <key.pem> key.pem: Bag Attributes friendlyName: privatekey localKeyID: 54 69 6D 65 20 31 34 30 31 32 33 34 35 36 37 38 39 30 Key Attributes: <No Attributes> -----BEGIN PRIVATE KEY----- lots_of_characters_present_here_replaced_for_this_post= -----END PRIVATE KEY----- Затем я удалил первые 4 строки файла .pem. Окончательный .pem выглядит так: -----BEGIN PRIVATE KEY----- lots_of_characters_are_present_here_which_i_have_replaced_for_this_post= -----END PRIVATE KEY-----   -  person gsinha    schedule 02.09.2014
comment
@gsinha Неудачный код выполняет проверку, и для этого вам нужен открытый ключ, а не закрытый ключ. Не могли бы вы попробовать команду из моего предыдущего комментария? Это дает вам открытый ключ (внутри сертификата X.509).   -  person SquareRootOfTwentyThree    schedule 02.09.2014
comment
@SquareRootOfTwentyThree Я создал новый сертификат, используя openssl pkcs12 -clcerts -nokeys -in myapp-36.p12 -out usercert.pem. Сгенерированный сертификат можно увидеть здесь (заменены конфиденциальные данные). Я попробовал и получил эту ошибку. Затем я удалил все до -----BEGIN PRIVATE KEY----- и попробовал еще раз. Новый сертификат находится здесь. На этот раз я получил эту ошибку.   -  person gsinha    schedule 02.09.2014
comment
Привет gsinha, у меня была такая же проблема. Можете ли вы рассказать мне, как вам удалось обойти это?   -  person MayK    schedule 24.10.2014
comment
@ user3824957 В экспериментальной версии PyCrypto было исправление. Некоторое время назад он также был включен в состав GAE Production. Это ветка обсуждения Gitkit. Я поднял проблема с GAE.   -  person gsinha    schedule 25.10.2014
comment
@gsinha: я столкнулся с той же проблемой. Вы получили какую-нибудь работу вокруг? Если да, поделитесь.   -  person Kartik Domadiya    schedule 08.05.2015
comment
@Kartik Эта проблема была исправлена ​​Google несколько месяцев назад.   -  person gsinha    schedule 20.05.2015
comment
@gsinha: да. Сейчас работает, хотя я ничего не менял.   -  person Kartik Domadiya    schedule 21.05.2015


Ответы (1)


Установка pyopenssl устранила проблему для меня:

pip install pyopenssl
person Sushil    schedule 05.03.2015
comment
Где запустить эту команду? На моем Mac/локальном компьютере, а затем включить пакет pyopenssl в app.yaml перед загрузкой в ​​GAE? - person Smart Home; 27.11.2015