У меня есть следующий код, который отлично проверяет обычные сертификаты:
from Crypto.Util import asn1
from OpenSSL import crypto
...
class OpenSSL(object):
def get_modulus(self, key_object):
key_asn1 = crypto.dump_privatekey(crypto.FILETYPE_ASN1,
key_object)
key_der = asn1.DerSequence()
key_der.decode(key_asn1)
return key_der[1] # DerSequence is (key_type, modulus, ...)
def validate_certificate(self, certificate):
is_valid, modulus = True, None
try:
cert_object = crypto.load_certificate(crypto.FILETYPE_PEM,
certificate)
except crypto.Error as e:
logger.debug('Invalid certificate! %s', e)
is_valid = False
else:
publickey_object = cert_object.get_pubkey()
modulus = self.get_modulus(publickey_object)
return (is_valid, modulus)
...
Но когда я запускаю этот код с E CC (Elipti c Curve Certificate), я получаю следующую ошибку :
>>> from myfile import OpenSSL
>>> openssl_instance = OpenSSL()
>>> with open("certificate.pem") as file:
... data = file.read()
...
>>> openssl_instance.validate_certificate(data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "myfile.py", line 99, in validate_certificate
modulus = self.get_modulus(publickey_object)
File "myfile.py", line 84, in get_modulus
key_object)
File "/usr/local/lib/python2.7/site-packages/OpenSSL/crypto.py", line 1905, in dump_privatekey
_openssl_assert(result_code != 0)
File "/usr/local/lib/python2.7/site-packages/OpenSSL/_util.py", line 67, in openssl_assert
exception_from_error_queue(error)
File "/usr/local/lib/python2.7/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.crypto.Error: [('elliptic curve routines', 'i2d_ECPrivateKey', 'EC lib')]
Может кто-нибудь сказать мне, как я должен / мог бы подтвердить сертификат E CC? Возможно, это ошибка в библиотеке pyOpenSSL? Сегодня я использую pyOpenSSL версии 16.2.0, но обновление до последней версии (19.1.0) не решило проблему. Не самый опытный человек с крипто / сертификатами, поэтому, если возможно, сообщите подробности, как будто я не работал с ИТ. Спасибо!