2011-01-03 3 views
3

У меня есть запрос подписи сертификата с добавленным стекем расширений. При создании сертификата на основе этого запроса я хотел бы иметь доступ к этому стеку для использования при создании окончательного сертификата.Доступ к стеку расширения CSR в M2Crypto

Однако, в то время как M2Crypto.X509.X509 имеет ряд помощников для доступа расширений (get_ext, get_ext_at и тому подобного), M2Crypto.X509.Request кажется, обеспечивает только элемент для добавления расширений, но никак не инспектировать расширения, уже связанные с данным объектом.

Я что-то упустил?

+1

Патч для этого представляется в https://github.com/martinpaljak/M2Crypto/pull/25 в случае, если кто нуждается Функциональность – viraptor

ответ

2

Вы правы.

Текущая версия M2Crypto не предоставляет необходимый интерфейс OpenSSL - X509_REQ_get_extensions.

Просто чтобы дать представление о том, что участие в терминах C:

X509_REQ *req = /* ... */; 
STACK_OF(X509_EXTENSION) *exts = X509_REQ_get_extensions(req); 
int count = sk_X509_EXTENSION_num(exts); 
int i; 
for (i = 0; i < count; ++i) { 
    X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); 
    /* Do something with ext */ 
} 
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); 

Поскольку M2Crypto использует SWIG обернуть код C, это не должно быть трудно выставить новый API, если у вас есть хороший C фона.

2

Другим вопросам, которые ищут этот вопрос через аналогичный поиск Google, привели меня сюда.

Перед тем, немного чистка.

def req_extensions(csrFilename): 
    cmd = ('openssl req -text -noout -in %s' 
     % csrFilename) 

    output = subprocess.check_output(cmd.split(), 
     stderr=subprocess.STDOUT) 

    output = re.sub(r': rsaEncryption', ':', output) 
    output = re.sub(r'[0-9a-f]{2}:', '', output) 

    return yaml.load(output) 

Тогда ...

csrExt = self.req_extensions('my.csr') 
keyUsage = (
    csrExt['Certificate Request']['Data']['Requested Extensions'] 
      ['X509v3 Key Usage']) 

SAN = (
    csrExt['Certificate Request']['Data']['Requested Extensions'] 
      ['X509v3 Subject Alternative Name']) 

т.д.

+0

Я беспокоюсь о хрупкости здесь - кажется рискованным предположить, что YAMLishness будет продолжать присутствовать в будущих версиях инструмента командной строки openssl. –

+0

Я полностью согласен, и, учитывая выбор, я буду использовать API каждый раз. Поскольку этот параметр не существует на данный момент, однако ... – GraduateOfAcmeU

+1

Извините, что вы протолкнул старый поток, но десериализация YAML из потенциально ненадежного источника представляет собой угрозу безопасности. Лучше использовать 'yaml.safe_load()'. – Fitblip

Смежные вопросы