Вы можете получить любое и все расширения в сертификате X.509, который вы загрузили с помощью pyOpenSSL.Например:
>>> from OpenSSL import crypto as c
>>> cert = c.load_certificate(c.FILETYPE_PEM, file('server.pem').read())
>>> cert.get_extension_count()
4L
>>> ext = cert.get_extension(0)
>>> ext.get_short_name()
'basicConstraints'
>>> ext.get_data()
'0\x00'
>>>
Данные выводятся в необработанном формате (некоторая кодировка ASN.1, возможно, в зависимости от конкретного расширения).
Вы также можете добавить расширения.
>>> newext = c.X509Extension('nsComment', 0, 'tacos are delicious')
>>> cert.add_extensions([newext])
>>> cert.get_extension_count()
5L
>>> cert.get_extension(4)
<X509Extension object at 0x7f74db7c2290>
>>> cert.get_extension(4).get_data()
'\x16\x13tacos are delicious'
>>>
Однако обратите внимание на небольшую асимметрию.Данные расширения должны быть строкой и автоматически кодироваться с использованием ASN.1.Похоже, это исключает возможность добавления произвольных нестроковых данных расширения.