summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmonitor/josef_leveldb.py13
-rwxr-xr-xmonitor/josef_monitor.py44
-rwxr-xr-xmonitor/josef_reader.py46
-rw-r--r--monitor/monitor_conf.py7
4 files changed, 47 insertions, 63 deletions
diff --git a/monitor/josef_leveldb.py b/monitor/josef_leveldb.py
index 9994609..9c6f77d 100755
--- a/monitor/josef_leveldb.py
+++ b/monitor/josef_leveldb.py
@@ -7,8 +7,6 @@ import leveldb
import ast
SEP = ";"
-# db = None
-
dbs = {}
@@ -41,7 +39,6 @@ def db_open(fn='./cert_db'):
if fn in dbs:
return dbs[fn]
else:
- # print "Opening " + fn
db = leveldb.LevelDB(fn)
dbs[fn] = db
return db
@@ -68,9 +65,7 @@ def db_append(db, key, val):
def db_add_domain_2(db_dir, key_in, val_in, db_in=None):
if db_in == None:
- # print val_in
val = "###" + ast.literal_eval(val_in)["leaf_hash"]
- # val = str(hash(val_in))
cert_db = db_open(db_dir + "certificates")
cert_db.Put(val, val_in)
@@ -119,7 +114,7 @@ def db_add_certs(db_dir, data):
pass
except IndexError:
pass
- db_close()
+ # db_close()
def db_lookup_domain(db_dir, domain):
@@ -135,7 +130,6 @@ def db_lookup_domain(db_dir, domain):
db = db_open(db_dir + "other")
cur_domain = domain_list.pop()
- # print cur_domain
try:
intermediate = db.Get(cur_domain).split(SEP)
except KeyError:
@@ -156,13 +150,11 @@ def db_lookup_domain(db_dir, domain):
# Prune
next_level = []
for item in intermediate:
- # print item
if match_domain(cur_domain, item):
- # print item
try:
tmp = db.Get(item).split(SEP)
- # print tmp
for tmp_item in tmp:
+ # This is really not a good solution...
if tmp_item[0:3] == "###":
res.append(tmp_item[3:])
else:
@@ -173,7 +165,6 @@ def db_lookup_domain(db_dir, domain):
certs = []
cert_db = db_open(db_dir + "certificates")
- # print res
for item in res:
tmp = cert_db.Get("###" + str(item))
certs.append(tmp)
diff --git a/monitor/josef_monitor.py b/monitor/josef_monitor.py
index 0569a81..83e3663 100755
--- a/monitor/josef_monitor.py
+++ b/monitor/josef_monitor.py
@@ -30,7 +30,6 @@ if not os.path.exists(OUTPUT_DIR):
if not os.path.exists(DB_PATH):
os.makedirs(DB_PATH)
-# DB = None
parser = argparse.ArgumentParser(description="")
@@ -51,7 +50,6 @@ class ctlog:
def incremental_build(self):
# Keeps state current during build, partial builds are possible.
self.sth = get_sth(self.url)
- # self.log("Building....")
start_size = self.entries
while self.entries < self.sth["tree_size"]:
tmp_size = self.entries
@@ -66,8 +64,6 @@ class ctlog:
" new entries. Size: " + str(self.entries))
else:
self.log("ERROR Failed to build tree from entries.")
- # else:
- # self.log("No new entries.")
def fetch_and_increment_subtree(self, first, last, url, subtree =[[]]):
@@ -237,8 +233,6 @@ def check_domain(raw_entry, log=None):
except IndexError:
return None
-
-
def verify_subtree(sth, subtree, base_url):
try:
tmp = deepcopy(subtree)
@@ -320,11 +314,7 @@ def get_all_roots(base_url):
root_cert = base64.decodestring(accepted_cert)
print get_cert_info(root_cert)["subject"]
-def main(args):
- global DB
- # Create logs
- logs = []
-
+def setup_domain_monitoring():
monitored_domains = []
with open(DOMAINS_FILE) as fp:
for line in fp:
@@ -332,13 +322,23 @@ def main(args):
for domain in tmp:
md = monitored_domain(domain["url"])
md.load_entries(domain["entries"])
+ monitored_domains.append(md)
+
for md in MONITORED_DOMAINS:
tmp = monitored_domain(md)
if not tmp in monitored_domains:
+ print "New domain (not in file) " + md
tmp.set()
monitored_domains.append(tmp)
+ return monitored_domains
+
+def main(args):
+ global DB
+ monitored_domains = setup_domain_monitoring()
+ # Create logs
+ logs = []
try:
for item in ctlogs:
logs.append(ctlog(item, ctlogs[item][0], ctlogs[item][1]))
@@ -368,27 +368,29 @@ def main(args):
for md in monitored_domains:
md.update()
-
+ # Normal exit oof the program
except KeyboardInterrupt:
print time.strftime('%H:%M:%S') + ' Received interrupt from user. Saving and exiting....'
for log in logs:
log.save()
+ # Save info about monitored domains
domain_dict = []
for md in monitored_domains:
domain_dict.append(md.to_dict())
open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
- # except Exception, err:
- # print Exception, err
- # for log in logs:
- # log.save()
-
- # domain_dict = []
- # for md in monitored_domains:
- # domain_dict.append(md.to_dict())
+ # Something went horribly wrong!
+ except Exception, err:
+ print Exception, err
+ for log in logs:
+ log.save()
- # open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
+ # Save info about monitored domains
+ domain_dict = []
+ for md in monitored_domains:
+ domain_dict.append(md.to_dict())
+ open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict))
diff --git a/monitor/josef_reader.py b/monitor/josef_reader.py
index 199fe29..8ffbd36 100755
--- a/monitor/josef_reader.py
+++ b/monitor/josef_reader.py
@@ -31,21 +31,14 @@ class monitored_domain:
f.write(s + "\n")
f.close()
- # def add(self, item):
- # self.entries.appent(item)
-
def set(self):
self.entries = db_monitor_domain(self.url, None, True, None)
self.log("Got " + str(len(self.entries)) + " certs for " + self.url)
def update(self):
new = db_monitor_domain(self.url, None, True, None)
- # if len(new) != len(self.entries):
- # print self.entries
- # print new
- compare_entry_lists(new, self.entries)
+ self.compare_and_log_entries(new, self.entries)
self.entries = new
-
def to_dict(self):
d = {}
@@ -62,7 +55,7 @@ class monitored_domain:
entries.append(monitored_entry(item["subject"],item["issuer"],item["log"],item["status"],item["leaf_hash"]))
self.entries = entries
- def compare_entry_lists(self, new, old):
+ def compare_and_log_entries(self, new, old):
added_items = []
removed_items = []
@@ -94,8 +87,8 @@ class monitored_entry:
self.leaf_hash = leaf_hash
def __eq__(self, other):
- return self.leaf_hash == other.leaf_hash
- # TODO check status (or expired wont expire)
+ return self.leaf_hash == other.leaf_hash
+ # return self.leaf_hash == other.leaf_hash and self.status == other.status
def __str__(self):
s = self.subject + \
@@ -117,25 +110,9 @@ class monitored_entry:
-parser = argparse.ArgumentParser(description="")
-parser.add_argument('--domain', default=None)
-parser.add_argument('--log', default=None)
-parser.add_argument('--exclude-invalid', action='store_true')
-parser.add_argument('--get-cert', action='store_true')
-
-args = parser.parse_args()
-
-monitored_domains = []
-for md in MONITORED_DOMAINS:
- monitored_domains.append(monitored_domain(md))
-
-db = DB_PATH
-
-
-
def db_monitor_domain(domain, log=None, exclude_invalid=None, get_cert=None):
# print domain
- raw = db_lookup_domain(db, domain)
+ raw = db_lookup_domain(DB_PATH, domain)
cur_time = dt.now()
count_valid = 0
@@ -209,6 +186,19 @@ def db_monitor_domain(domain, log=None, exclude_invalid=None, get_cert=None):
return res
if __name__ == "__main__":
+
+ parser = argparse.ArgumentParser(description="")
+ parser.add_argument('--domain', default=None)
+ parser.add_argument('--log', default=None)
+ parser.add_argument('--exclude-invalid', action='store_true')
+ parser.add_argument('--get-cert', action='store_true')
+
+ args = parser.parse_args()
+
+ monitored_domains = []
+ for md in MONITORED_DOMAINS:
+ monitored_domains.append(monitored_domain(md))
+
if args.domain:
db_monitor_domain(args.domain, args.log, args.exclude_invalid, args.get_cert)
else:
diff --git a/monitor/monitor_conf.py b/monitor/monitor_conf.py
index 1106183..2628185 100644
--- a/monitor/monitor_conf.py
+++ b/monitor/monitor_conf.py
@@ -21,6 +21,7 @@ MONITORED_DOMAINS = [
"*.liu.se",
"*.kth.se",
"*.nordu.net",
+ "*.sunet.se",
# "mail.google.com",
# "*.symantec.com",
# "*.se",
@@ -32,9 +33,9 @@ ctlogs = {
# ["https://ct.googleapis.com/pilot/",
# "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfahLEimAoz2t01p3uMziiLOl/fHTDM0YDOhBRuiBARsV4UvxG2LdNgoIGLrtCzWE0J5APC2em4JlvR8EEEFMoA=="],
- "plausible":
- ["https://plausible.ct.nordu.net/",
- "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9UV9+jO2MCTzkabodO2F7LM03MUBc8MrdAtkcW6v6GA9taTTw9QJqofm0BbdAsbtJL/unyEf0zIkRgXjjzaYqQ=="],
+ # "plausible":
+ # ["https://plausible.ct.nordu.net/",
+ # "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9UV9+jO2MCTzkabodO2F7LM03MUBc8MrdAtkcW6v6GA9taTTw9QJqofm0BbdAsbtJL/unyEf0zIkRgXjjzaYqQ=="],
# "digicert":
# ["https://ct1.digicert-ct.com/log/",