Remove old class cert

This commit is contained in:
Mauricio Baeza 2020-12-31 00:06:50 -06:00
parent e0d1f40a11
commit 38c9c676af
1 changed files with 0 additions and 151 deletions

View File

@ -395,157 +395,6 @@ def to_slug(string):
return value.replace(' ', '_')
class Certificado(object):
def __init__(self, paths):
self._path_key = paths['path_key']
self._path_cer = paths['path_cer']
self._modulus = ''
self.error = ''
def _kill(self, path):
try:
os.remove(path)
except:
pass
return
def _get_info_cer(self, session_rfc):
data = {}
args = 'openssl x509 -inform DER -in {}'
try:
cer_pem = _call(args.format(self._path_cer))
except Exception as e:
self.error = 'No se pudo convertir el CER en PEM'
return data
args = 'openssl enc -base64 -in {}'
try:
cer_txt = _call(args.format(self._path_cer))
except Exception as e:
self.error = 'No se pudo convertir el CER en TXT'
return data
args = 'openssl x509 -inform DER -in {} -noout -{}'
try:
result = _call(args.format(self._path_cer, 'purpose')).split('\n')[3]
except Exception as e:
self.error = 'No se puede saber si es FIEL'
return data
if result == 'SSL server : No':
self.error = 'El certificado es FIEL'
return data
result = _call(args.format(self._path_cer, 'serial'))
serie = result.split('=')[1].split('\n')[0][1::2]
result = _call(args.format(self._path_cer, 'subject'))
#~ Verificar si es por la version de OpenSSL
t1 = 'x500UniqueIdentifier = '
t2 = 'x500UniqueIdentifier='
if t1 in result:
rfc = result.split(t1)[1][:13].strip()
elif t2 in result:
rfc = result.split(t2)[1][:13].strip()
else:
self.error = 'No se pudo obtener el RFC del certificado'
print ('\n', result)
return data
if not DEBUG:
if not rfc == session_rfc:
self.error = 'El RFC del certificado no corresponde.'
return data
dates = _call(args.format(self._path_cer, 'dates')).split('\n')
desde = parser.parse(dates[0].split('=')[1])
hasta = parser.parse(dates[1].split('=')[1])
self._modulus = _call(args.format(self._path_cer, 'modulus'))
data['cer'] = read_file(self._path_cer)
data['cer_pem'] = cer_pem
data['cer_txt'] = cer_txt.replace('\n', '')
data['serie'] = serie
data['rfc'] = rfc
data['desde'] = desde.replace(tzinfo=None)
data['hasta'] = hasta.replace(tzinfo=None)
return data
def _get_p12(self, password, rfc, token):
tmp_cer = tempfile.mkstemp()[1]
tmp_key = tempfile.mkstemp()[1]
tmp_p12 = tempfile.mkstemp()[1]
args = 'openssl x509 -inform DER -in "{}" -out "{}"'
_call(args.format(self._path_cer, tmp_cer))
args = 'openssl pkcs8 -inform DER -in "{}" -passin pass:"{}" -out "{}"'
_call(args.format(self._path_key, password, tmp_key))
args = 'openssl pkcs12 -export -in "{}" -inkey "{}" -name "{}" ' \
'-passout pass:"{}" -out "{}"'
_call(args.format(tmp_cer, tmp_key, rfc, token, tmp_p12))
data = read_file(tmp_p12)
self._kill(tmp_cer)
self._kill(tmp_key)
self._kill(tmp_p12)
return data
def _get_info_key(self, password, rfc, token):
data = {}
args = 'openssl pkcs8 -inform DER -in "{}" -passin pass:"{}"'
try:
result = _call(args.format(self._path_key, password))
except Exception as e:
self.error = 'Contraseña incorrecta'
return data
args = 'openssl pkcs8 -inform DER -in "{}" -passin pass:"{}" | ' \
'openssl rsa -noout -modulus'
mod_key = _call(args.format(self._path_key, password))
if self._modulus != mod_key:
self.error = 'Los archivos no son pareja'
return data
args = "openssl pkcs8 -inform DER -in '{}' -passin pass:'{}' | " \
"openssl rsa -des3 -passout pass:'{}'".format(
self._path_key, password, token)
key_enc = _call(args)
data['key'] = read_file(self._path_key)
data['key_enc'] = key_enc
data['p12'] = self._get_p12(password, rfc, token)
return data
def validate(self, password, rfc, auth):
token = _get_md5(rfc)
if USAR_TOKEN:
token = auth['PASS']
if AUTH['DEBUG']:
token = AUTH['PASS']
if not self._path_key or not self._path_cer:
self.error = 'Error en las rutas temporales del certificado'
return {}
data = self._get_info_cer(rfc)
if not data:
return {}
llave = self._get_info_key(password, rfc, token)
if not llave:
return {}
data.update(llave)
self._kill(self._path_key)
self._kill(self._path_cer)
return data
def make_xml(data, certificado):
from .cfdi_xml import CFDI