Add debug script for SSL certificates
authorHelga Velroyen <helgav@google.com>
Thu, 20 Aug 2015 14:00:21 +0000 (16:00 +0200)
committerHelga Velroyen <helgav@google.com>
Tue, 25 Aug 2015 09:16:34 +0000 (11:16 +0200)
This adds a little debug script to 'devel/', which eases
debugging of SSL problems. When provided with a certificate
file (such as client.pem or server.pem), it prints the
certificate's digest. This digest can then be compared
to the ssconf_master_candidate_certs for example.

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Klaus Aehlig <aehlig@google.com>

Makefile.am
devel/cert_digest.py [copied from tools/fmtjson with 65% similarity]

index eb25a82..0258c0d 100644 (file)
@@ -1611,6 +1611,7 @@ EXTRA_DIST += \
        daemons/ganeti-cleaner.in \
        $(pkglib_python_scripts) \
        devel/build_chroot \
+       devel/cert_digest.py \
        devel/upload \
        devel/webserver \
        tools/kvm-ifup.in \
similarity index 65%
copy from tools/fmtjson
copy to devel/cert_digest.py
index 0da3407..683fbd3 100755 (executable)
@@ -1,7 +1,6 @@
 #!/usr/bin/python
-#
 
-# Copyright (C) 2011 Google Inc.
+# Copyright (C) 2015 Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-"""Tool to format JSON data.
-
-"""
+# This is a test script to ease debugging of SSL problems. It can be
+# applied on any of Ganeti's SSL certificates (for example client.pem
+# and server.pem) and will output a digest.
 
 import sys
-import simplejson
+import OpenSSL
 
 
-def main():
-  """Main routine.
+def usage():
+    print "%s filename" % sys.argv[0]
+    print
+    print "'filename' must be a filename of an SSL certificate in PEM format."
 
-  """
-  if len(sys.argv) > 1:
-    sys.stderr.write("Read JSON data from standard input and write a"
-                     " formatted version on standard output. There are"
-                     " no options or arguments.\n")
-    sys.exit(1)
 
-  data = simplejson.load(sys.stdin)
-  simplejson.dump(data, sys.stdout, indent=2, sort_keys=True)
-  sys.stdout.write("\n")
+if __name__ == "__main__":
 
+    if len(sys.argv) < 2:
+      usage()
+
+    cert_fd = open(sys.argv[1], "r")
+    cert_plain = cert_fd.read()
+
+    print "Certificate:"
+    print cert_plain
+
+    cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,
+                                           cert_plain)
+
+    print "Digest:"
+    print cert.digest("sha1")
 
-if __name__ == "__main__":
-  main()