[attributs, crans_utils, objets] Ajout d'attributs encrypted, privatekey, csr et objectClass privateKey
On peut générer/ajouter des clefs privées via gest_crans_lc. Elles sont forcément chiffré avec une passphrase. Pour les machines crans, elle est dans /etc/crans/secrets. Pour les autres machines elle n'est pas connue du crans et demandée à l'utilisateur lorsqu'il y a besoin de la clef privée pour des opérations. Du coup, on peut générer des csr automatiquement dans gest_crans_lc, ça m'a l'air bien pratique, ça évite d'oublier des subjectAltName par exemple quand on renouvel le certificat comme les nom du certificat sont également dans ldap. On peut aussi, juste avec une requête ldap voir quels sont les certificats qui vont bientôt expirer (&(objectClass=x509Cert)(end<int(time.time())+delai)).
This commit is contained in:
parent
480497ce4e
commit
72e35bcb32
3 changed files with 118 additions and 35 deletions
28
objets.py
28
objets.py
|
@ -453,9 +453,12 @@ class CransLdapObject(object):
|
|||
orig_ldif = self.attrs.to_ldif()
|
||||
for attr in binary:
|
||||
ldif['%s;binary' % attr]=ldif[attr]
|
||||
orig_ldif['%s;binary' % attr]=orig_ldif[attr]
|
||||
orig_ldif['%s;binary' % attr]=orig_ldif.get(attr, [])
|
||||
del(ldif[attr])
|
||||
del(orig_ldif[attr])
|
||||
try:
|
||||
del(orig_ldif[attr])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return modifyModlist(orig_ldif, ldif)
|
||||
|
||||
|
@ -919,9 +922,9 @@ class machine(CransLdapObject):
|
|||
self._proprio = new_cransldapobject(self.conn, self.parent_dn, self.mode if mode is None else mode)
|
||||
return self._proprio
|
||||
|
||||
def certificats(self):
|
||||
def certificats(self, refresh=False):
|
||||
"""Renvoie la liste des certificats de la machine"""
|
||||
if self._certificats is None:
|
||||
if refresh or self._certificats is None:
|
||||
self._certificats = self.conn.search(u'xid=*', dn = self.dn, scope = 1, mode=self.mode)
|
||||
for m in self._certificats:
|
||||
m._machine = self
|
||||
|
@ -1239,13 +1242,16 @@ class baseCert(CransLdapObject):
|
|||
variables.modified: [attributs.nounou, attributs.bureau, attributs.parent],
|
||||
variables.deleted: [attributs.nounou, attributs.bureau, attributs.parent],
|
||||
}
|
||||
attribs = [ attributs.xid, attributs.certificat, attributs.hostCert, attributs.historique]
|
||||
attribs = [ attributs.xid, attributs.certificat, attributs.hostCert, attributs.historique,
|
||||
attributs.info, attributs.csr ]
|
||||
|
||||
tlsa_attribs = [ attributs.certificatUsage, attributs.selector, attributs.matchingType,
|
||||
attributs.portTCPin, attributs.portUDPin]
|
||||
x509_attribs = [ attributs.issuerCN, attributs.start, attributs.end,
|
||||
attributs.crlUrl, attributs.revocked, attributs.serialNumber ]
|
||||
|
||||
private_attribs = [ attributs.privatekey, attributs.encrypted ]
|
||||
|
||||
ldap_name = "baseCert"
|
||||
|
||||
protected_issuer = [u'CAcert Class 3 Root', u'CA Cert Signing Authority']
|
||||
|
@ -1261,6 +1267,8 @@ class baseCert(CransLdapObject):
|
|||
self.attribs.extend(self.tlsa_attribs)
|
||||
if 'x509Cert' in self['objectClass']:
|
||||
self.attribs.extend(self.x509_attribs)
|
||||
if "privateKey" in self['objectClass']:
|
||||
self.attribs.extend(self.private_attribs)
|
||||
super(baseCert, self).__init__(*args, **kwargs)
|
||||
|
||||
def _check_setitem(self, attr, values):
|
||||
|
@ -1276,6 +1284,16 @@ class baseCert(CransLdapObject):
|
|||
if domain in [self['certificat'][0]['subject']['CN']] + self['certificat'][0]['extensions'].get('subjectAltName',[]):
|
||||
raise EnvironmentError("Vous ne pouvez pas retirer le domaine %s alors qu'il est déclaré dans le certificat" % domain)
|
||||
|
||||
def private(self, privatekey, encrypted):
|
||||
if not self.mode in ['w', 'rw']:
|
||||
return
|
||||
if u"privateKey" in self['objectClass']:
|
||||
return
|
||||
self._modifs['objectClass'].append(u"privateKey")
|
||||
self.attribs.extend(self.private_attribs)
|
||||
self['encrypted']=encrypted
|
||||
self['privatekey']=privatekey
|
||||
|
||||
def tlsa(self, certificatUsage, matchingType):
|
||||
if not self.mode in ['w', 'rw']:
|
||||
return
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue