diff --git a/cluster/clustercfg/ca.py b/cluster/clustercfg/ca.py
index 9ed2053..0107080 100644
--- a/cluster/clustercfg/ca.py
+++ b/cluster/clustercfg/ca.py
@@ -1,4 +1,5 @@
 # encoding: utf-8
+from datetime import datetime, timezone
 import json
 import logging
 import os
@@ -171,6 +172,35 @@
 
         return key, csr
 
+    def gen_csr(self, key, hosts, o=_std_subj['O'], ou=_std_subj['OU']):
+        """
+        Generate a CSR while already having a private key - for renewals, etc.
+
+        TODO(q3k): this shouldn't be a CA method, but a cert method.
+        """
+        cfg = {
+            "CN": hosts[0],
+            "hosts": hosts,
+            "key": {
+                "algo": "rsa",
+                "size": 4096,
+            },
+            "names": [
+                {
+                    "C": _std_subj["C"],
+                    "ST": _std_subj["ST"],
+                    "L": _std_subj["L"],
+                    "O": o,
+                    "OU": ou,
+                },
+            ],
+        }
+        cfg.update(_ca_config)
+        logger.info("{}: Generating CSR for {}".format(self, hosts))
+        out = self._cfssl_call(['gencsr', '-key', key, '-'], obj=cfg)
+
+        return out['csr']
+
     def sign(self, csr, save=None, profile='client-server'):
         logging.info("{}: Signing CSR".format(self))
         ca = self._cert
@@ -246,12 +276,30 @@
         with open(self.cert_path) as f:
             return f.read()
 
+    @property
+    def cert_expires_soon(self):
+        if not self.cert_exists:
+            return False
+
+        out = self.ca._cfssl_call(['certinfo', '-cert', self.cert_path], stdin="")
+        not_after = datetime.strptime(out['not_after'], '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc)
+        until = not_after - datetime.now(timezone.utc)
+        if until.days < 30:
+            return True
+        return False
+
     def ensure(self):
-        if self.key_exists and self.cert_exists:
+        if self.key_exists and self.cert_exists and not self.cert_expires_soon:
             return
 
-        logger.info("{}: Generating...".format(self))
-        key, csr = self.ca.gen_key(self.hosts, o=self.o, ou=self.ou, save=self.key)
+        key = None
+        if not self.key_exists:
+            logger.info("{}: Generating key...".format(self))
+            key, csr = self.ca.gen_key(self.hosts, o=self.o, ou=self.ou, save=self.key)
+        else:
+            logger.info("{}: Renewing certificate...".format(self))
+            # Use already existing key
+            csr = self.ca.gen_csr(self.key_path, self.hosts, o=self.o, ou=self.ou)
         self.ca.sign(csr, save=self.cert, profile=self.profile)
 
     def upload(self, c, remote_cert, remote_key, concat_ca=False):
