delete certificates that fail
authorThomasV <thomasv@gitorious>
Wed, 2 Oct 2013 01:20:15 +0000 (03:20 +0200)
committerThomasV <thomasv@gitorious>
Wed, 2 Oct 2013 01:20:15 +0000 (03:20 +0200)
lib/interface.py

index e6f2e21..ec76bc6 100644 (file)
@@ -253,6 +253,7 @@ class Interface(threading.Thread):
 
         if self.use_ssl:
             cert_path = os.path.join( self.config.get('path'), 'certs', self.host)
+
             if not os.path.exists(cert_path):
                 # get server certificate.
                 # Do not use ssl.get_server_certificate because it does not work with proxy
@@ -267,8 +268,21 @@ class Interface(threading.Thread):
                 dercert = s.getpeercert(True)
                 s.close()
                 cert = ssl.DER_cert_to_PEM_cert(dercert)
-                    
+
+                #from OpenSSL import crypto as c
+                #_cert = c.load_certificate(c.FILETYPE_PEM, cert)
+                #notAfter = _cert.get_notAfter() 
+                #notBefore = _cert.get_notBefore() 
+                #now = time.time()
+                #if now > time.mktime( time.strptime(notAfter[:-1] + "GMT", "%Y%m%d%H%M%S%Z") ):
+                #    print "deprecated cert", host, notAfter
+                #    return
+                #if now < time.mktime( time.strptime(notBefore[:-1] + "GMT", "%Y%m%d%H%M%S%Z") ):
+                #    print "notbefore", host, notBefore
+                #    return
+
                 with open(cert_path,"w") as f:
+                    print_error("saving certificate for",self.host)
                     f.write(cert)
 
 
@@ -291,21 +305,23 @@ class Interface(threading.Thread):
                                     do_handshake_on_connect=True)
             except ssl.SSLError, e:
                 print_error("SSL error:", self.host, e)
+                if e.errno == 1:
+                    # delete the certificate so we will download a new one
+                    os.unlink(cert_path)
                 return
             except:
                 traceback.print_exc(file=sys.stdout)
                 print_error("wrap_socket failed", self.host)
                 return
 
-        # hostname verification (disabled)
-        if self.use_ssl and False:
-            from backports.ssl_match_hostname import match_hostname, CertificateError
-            try:
-                match_hostname(s.getpeercert(), self.host)
-                print_error("hostname matches", self.host)
-            except CertificateError, ce:
-                print_error("hostname does not match", self.host, s.getpeercert())
-                return
+            # hostname verification (disabled)
+            #from backports.ssl_match_hostname import match_hostname, CertificateError
+            #try:
+            #    match_hostname(s.getpeercert(), self.host)
+            #    print_error("hostname matches", self.host)
+            #except CertificateError, ce:
+            #    print_error("hostname does not match", self.host, s.getpeercert())
+            #    return
 
         s.settimeout(60)
         self.s = s