Parse SubjectAlternativeNames from CSR into Lemur Certificate
This commit is contained in:
parent
a865675537
commit
b86e381e20
|
@ -112,10 +112,22 @@ class CertificateInputSchema(CertificateCreationSchema):
|
||||||
if data.get('replacements'):
|
if data.get('replacements'):
|
||||||
data['replaces'] = data['replacements'] # TODO remove when field is deprecated
|
data['replaces'] = data['replacements'] # TODO remove when field is deprecated
|
||||||
if data.get('csr'):
|
if data.get('csr'):
|
||||||
dns_names = cert_utils.get_dns_names_from_csr(data['csr'])
|
csr_sans = cert_utils.get_sans_from_csr(data['csr'])
|
||||||
if not data['extensions']['subAltNames']['names']:
|
if not data.get('extensions'):
|
||||||
|
data['extensions'] = {
|
||||||
|
'subAltNames': {
|
||||||
|
'names': []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elif not data['extensions'].get('subAltNames'):
|
||||||
|
data['extensions']['subAltNames'] = {
|
||||||
|
'subAltNames': {
|
||||||
|
'names': []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elif not data['extensions']['subAltNames'].get('names'):
|
||||||
data['extensions']['subAltNames']['names'] = []
|
data['extensions']['subAltNames']['names'] = []
|
||||||
data['extensions']['subAltNames']['names'] += dns_names
|
data['extensions']['subAltNames']['names'] += csr_sans
|
||||||
return missing.convert_validity_years(data)
|
return missing.convert_validity_years(data)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,14 +14,14 @@ from cryptography.hazmat.backends import default_backend
|
||||||
from marshmallow.exceptions import ValidationError
|
from marshmallow.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
def get_dns_names_from_csr(data):
|
def get_sans_from_csr(data):
|
||||||
"""
|
"""
|
||||||
Fetches DNSNames from CSR.
|
Fetches SubjectAlternativeNames from CSR.
|
||||||
Potentially extendable to any kind of SubjectAlternativeName
|
Works with any kind of SubjectAlternativeName
|
||||||
:param data: PEM-encoded string with CSR
|
:param data: PEM-encoded string with CSR
|
||||||
:return:
|
:return: List of LemurAPI-compatible subAltNames
|
||||||
"""
|
"""
|
||||||
dns_names = []
|
sub_alt_names = []
|
||||||
try:
|
try:
|
||||||
request = x509.load_pem_x509_csr(data.encode('utf-8'), default_backend())
|
request = x509.load_pem_x509_csr(data.encode('utf-8'), default_backend())
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -29,14 +29,12 @@ def get_dns_names_from_csr(data):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
alt_names = request.extensions.get_extension_for_class(x509.SubjectAlternativeName)
|
alt_names = request.extensions.get_extension_for_class(x509.SubjectAlternativeName)
|
||||||
|
for alt_name in alt_names.value:
|
||||||
for name in alt_names.value.get_values_for_type(x509.DNSName):
|
sub_alt_names.append({
|
||||||
dns_name = {
|
'nameType': type(alt_name).__name__,
|
||||||
'nameType': 'DNSName',
|
'value': alt_name.value
|
||||||
'value': name
|
})
|
||||||
}
|
|
||||||
dns_names.append(dns_name)
|
|
||||||
except x509.ExtensionNotFound:
|
except x509.ExtensionNotFound:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return dns_names
|
return sub_alt_names
|
||||||
|
|
Loading…
Reference in New Issue