Commit 3687dd51 authored by Julien Muchembled's avatar Julien Muchembled

Do not fallback on old expired certificate when it can't be renewed

parent 4fe44ea3
...@@ -44,37 +44,40 @@ def fingerprint(cert, alg='sha1'): ...@@ -44,37 +44,40 @@ def fingerprint(cert, alg='sha1'):
def maybe_renew(path, cert, info, renew, force=False): def maybe_renew(path, cert, info, renew, force=False):
from .registry import RENEW_PERIOD from .registry import RENEW_PERIOD
retry_period = 86400
not_after = 0 if force else notAfter(cert)
while True: while True:
if force: while True:
force = False next_renew = not_after - RENEW_PERIOD
else:
next_renew = notAfter(cert) - RENEW_PERIOD
if time.time() < next_renew: if time.time() < next_renew:
return cert, next_renew return cert, next_renew
try: try:
pem = renew() pem = renew()
if not pem or pem == crypto.dump_certificate( if not pem or pem == crypto.dump_certificate(
crypto.FILETYPE_PEM, cert): crypto.FILETYPE_PEM, cert):
exc_info = 0 exc_info = 0
break
cert = crypto.load_certificate(crypto.FILETYPE_PEM, pem)
except Exception:
exc_info = 1
break break
cert = crypto.load_certificate(crypto.FILETYPE_PEM, pem) new_path = path + '.new'
except Exception: with open(new_path, 'w') as f:
exc_info = 1 f.write(pem)
break try:
new_path = path + '.new' s = os.stat(path)
with open(new_path, 'w') as f: os.chown(new_path, s.st_uid, s.st_gid)
f.write(pem) except OSError:
try: pass
s = os.stat(path) os.rename(new_path, path)
os.chown(new_path, s.st_uid, s.st_gid) not_after = notAfter(cert)
except OSError: logging.info("%s renewed until %s UTC",
pass info, time.asctime(time.gmtime(not_after)))
os.rename(new_path, path) logging.error("%s not renewed. Will retry tomorrow.",
logging.info("%s renewed until %s UTC", info, exc_info=exc_info)
info, time.asctime(time.gmtime(notAfter(cert)))) if time.time() < not_after:
logging.error("%s not renewed. Will retry tomorrow.", return cert, time.time() + retry_period
info, exc_info=exc_info) time.sleep(retry_period)
return cert, time.time() + 86400
class VerifyError(Exception): class VerifyError(Exception):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment