Hi
Please consider the attached patch that makes x509 xertificate validity
(notBeofre and notAfter) available in environement for the tls-verify
script.
I use it to monitor OpenVPN certificate expirations in Nagios. I can
share the Nagios bits with whoever is interested.
--
Emmanuel Dreyfus
[email protected]
--- src/openvpn/ssl_verify.c.orig 2013-01-28 16:07:44.000000000 +0100
+++ src/openvpn/ssl_verify.c 2013-01-30 09:40:32.000000000 +0100
@@ -399,8 +399,10 @@
)
{
char envname[64];
char *serial = NULL;
+ char *notBefore = NULL;
+ char *notAfter = NULL;
struct gc_arena gc = gc_new ();
/* Save X509 fields in environment */
#ifdef ENABLE_X509_TRACK
@@ -435,8 +437,19 @@
serial = x509_get_serial(peer_cert, &gc);
openvpn_snprintf (envname, sizeof(envname), "tls_serial_%d", cert_depth);
setenv_str (es, envname, serial);
+ /* export Validity */
+ if ((notBefore = x509_get_validity_notBefore(peer_cert, &gc)) != NULL) {
+ openvpn_snprintf (envname, sizeof(envname), "tls_notbefore_%d",
cert_depth);
+ setenv_str (es, envname, notBefore);
+ }
+
+ if ((notAfter = x509_get_validity_notAfter(peer_cert, &gc)) != NULL) {
+ openvpn_snprintf (envname, sizeof(envname), "tls_notafter_%d", cert_depth);
+ setenv_str (es, envname, notAfter);
+ }
+
gc_free(&gc);
}
/*
--- src/openvpn/ssl_verify_backend.h.orig 2013-01-30 11:34:30.000000000
+0100
+++ src/openvpn/ssl_verify_backend.h 2013-01-30 11:38:06.000000000 +0100
@@ -124,8 +124,36 @@
*/
char *x509_get_serial (openvpn_x509_cert_t *cert, struct gc_arena *gc);
/*
+ * Return the certificate's notBefore validity
+ *
+ * The notBefore validity number is returned as a string with
+ * format YYmmddHHMMSSZ
+ *
+ * @param cert Certificate to retrieve the notBefore validity from.
+ * @param gc Garbage collection arena to use when allocating string.
+ *
+ * @return The certificate's notBefore validity
+ */
+char * x509_get_validity_notBefore (openvpn_x509_cert_t *cert,
+ struct gc_arena *gc);
+
+/*
+ * Return the certificate's notAfter validity
+ *
+ * The notAfter validity number is returned as a string with
+ * format YYmmddHHMMSSZ
+ *
+ * @param cert Certificate to retrieve the notAfter validity from.
+ * @param gc Garbage collection arena to use when allocating string.
+ *
+ * @return The certificate's notAfter validity
+ */
+char * x509_get_validity_notAfter (openvpn_x509_cert_t *cert,
+ struct gc_arena *gc);
+
+/*
* Save X509 fields to environment, using the naming convention:
*
* X509_{cert_depth}_{name}={value}
*
--- src/openvpn/ssl_verify_openssl.c.orig 2013-01-28 16:07:44.000000000
+0100
+++ src/openvpn/ssl_verify_openssl.c 2013-01-30 09:32:29.000000000 +0100
@@ -237,8 +237,32 @@
return serial;
}
+char *
+x509_get_validity_notBefore (openvpn_x509_cert_t *cert, struct gc_arena *gc)
+{
+ unsigned char *buf;
+
+ if ((buf = ASN1_STRING_data(X509_get_notBefore(cert))) == NULL)
+ return NULL;
+
+ return string_alloc(buf, gc);
+}
+
+
+char *
+x509_get_validity_notAfter (openvpn_x509_cert_t *cert, struct gc_arena *gc)
+{
+ unsigned char *buf;
+
+ if ((buf = ASN1_STRING_data(X509_get_notAfter(cert))) == NULL)
+ return NULL;
+
+ return string_alloc(buf, gc);
+}
+
+
unsigned char *
x509_get_sha1_hash (X509 *cert, struct gc_arena *gc)
{
char *hash = gc_malloc(SHA_DIGEST_LENGTH, false, gc);
--- src/openvpn/ssl_verify_polarssl.c.orig 2013-01-30 09:36:41.000000000
+0100
+++ src/openvpn/ssl_verify_polarssl.c 2013-01-30 09:37:42.000000000 +0100
@@ -140,8 +140,21 @@
return buf;
}
+char *
+x509_get_validity_notBefore (openvpn_x509_cert_t *cert, struct gc_arena *gc)
+{
+ return NULL;
+}
+
+
+char *
+x509_get_validity_notAfter (openvpn_x509_cert_t *cert, struct gc_arena *gc)
+{
+ return NULL;
+}
+
unsigned char *
x509_get_sha1_hash (x509_cert *cert, struct gc_arena *gc)
{
unsigned char *sha1_hash = gc_malloc(SHA_DIGEST_LENGTH, false, gc);