Уведомления

Группа в Telegram: @pythonsu

#1 Июль 12, 2011 18:29:23

Putsli
От:
Зарегистрирован: 2011-07-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Приветствую,
сразу хочу сообщить что я ни разу не программист. Есть задача вытащить из сертификата дополнение “subjectAltName”.
Насколько я понимаю, в моём сертификате, это поле “DirName”. Почитав немного о модуле M2Crypto,
налабал такой “код”:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import glob, M2Crypto.X509 as pki

for file in glob.glob("*.cer"):
cert = pki.load_cert(('%s' % file), format=0)
print cert.get_ext('subjectAltName').get_value()
После исполнения кода в консоли появляются такие вот кракозябры:
DirName:/CN=\xD0\x90\xD0\xBF\xD0\xB0\xD0\xBD\xD0\xB0\xD1\x81\xD0\xB5\xD0\xB2\xD0\xB8\xD1\x87 \xD0\x91\xD0\xBE\xD1\x80\xD0\xB8\xD1\x81 \xD0\x92\xD0\xB0\xD1\x81\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xB5\xD0\xB2\xD0\xB8\xD1\x87
Я так понимаю что это utf-8, помогите плз. привести вывод программы к читаемому виду.



Отредактировано (Июль 12, 2011 18:30:34)

Офлайн

#2 Июль 13, 2011 12:52:56

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

fd = open( "filename", 'rb' )
key = fd.read().encode( 'ascii' )

Офлайн

#3 Июль 13, 2011 14:14:43

Putsli
От:
Зарегистрирован: 2011-07-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Хм, я вроде как не обычный файл открываю, а сертификат.



Офлайн

#4 Июль 13, 2011 14:27:15

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Putsli
Хм, я вроде как не обычный файл открываю, а сертификат.
А разница в чем? Этот пример из моего опыта работы с M2Crypto. Python открывает файл как unicode, M2Crypto (вернее его нижняя с-обвязка) хочет ascii.

Офлайн

#5 Июль 13, 2011 14:51:44

Putsli
От:
Зарегистрирован: 2011-07-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

key = fd.read().encode( 'ascii' )
UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 1: ordinal not in range(128)
Вот что получаю в консоли.



Офлайн

#6 Июль 13, 2011 16:48:06

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Ну как так )
Я же привел общий код, в вашем случае:

print cert.get_ext('subjectAltName').get_value().encode( 'ascii' )

Офлайн

#7 Июль 13, 2011 17:20:37

Putsli
От:
Зарегистрирован: 2011-07-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Это я попробовал первым делом, на выходе по прежнему точно такие же кракозябры.



Отредактировано (Июль 13, 2011 17:25:20)

Офлайн

#8 Июль 13, 2011 17:32:16

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Так, а какая система у вас?

Офлайн

#9 Июль 13, 2011 17:50:14

Putsli
От:
Зарегистрирован: 2011-07-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

Linux, Ubuntu 11.04, причём вот это:

print cert.get_subject().CN
нормально отрабатывает, всё читается.



Офлайн

#10 Июль 13, 2011 18:14:38

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

M2Crypto + неправильная кодировка.

print cert.as_text()
А такой вариант что выдаст?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version