]> git.ipfire.org Git - people/pmueller/ipfire-3.x.git/commitdiff
ca-certificates: Make this all build without Python 2 and Perl
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 28 Feb 2023 18:06:44 +0000 (18:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 28 Feb 2023 18:07:07 +0000 (18:07 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
ca-certificates/ca-certificates.nm
ca-certificates/certdata2pem.py
ca-certificates/generate-cacerts.pl [deleted file]

index e9b6d53bacbbab17f7600fcfd319acde71b77af8..fadabdce02673e6dbac8fbed9250be1fb55638c9 100644 (file)
@@ -5,7 +5,7 @@
 
 name       = ca-certificates
 version    = 2022.12
-release    = 1
+release    = 2
 arch       = noarch
 
 groups     = System/Base
@@ -24,32 +24,29 @@ sources    =
 build
        requires
                openssl
-               perl
-               rcs
+               p11-kit
+               python3
        end
 
        DIR_APP = %{DIR_SOURCE}
 
        build
-               # Create file layout.
+               # Create file layout
                mkdir -pv certs
                cp certdata.txt blacklist.txt certs
-               cd certs
 
-               python %{DIR_SOURCE}/certdata2pem.py
+               pushd certs
+               python3 %{DIR_SOURCE}/certdata2pem.py
+               popd
 
-               cd ..
                (cat <<EOF
                # This is a bundle of X.509 certificates of public Certificate
                # Authorities.  It was generated from the Mozilla root CA list.
                # 
                # Source: mozilla/security/nss/lib/ckfw/builtins/certdata.txt
                #
-               # Generated from:
                EOF
-               ident -q certdata.txt | sed '1d;s/^/#/';
-
-               echo '#' ) > ca-bundle.crt
+               ) > ca-bundle.crt
 
                (cat <<EOF
                # This is a bundle of X.509 certificates of public Certificate
@@ -59,33 +56,30 @@ build
                #
                # Source: mozilla/security/nss/lib/ckfw/builtins/certdata.txt
                #
-               # Generated from:
                EOF
-               ident -q certdata.txt | sed '1d;s/^/#/';
-               echo '#' ) > ca-bundle.trust.crt
-
-               for f in certs/*.crt; do 
-                       [ -z "${f}" ] && continue
-
-                       tbits=$(sed -n '/^# openssl-trust/{s/^.*=//;p;}' ${f})
-                       case "${tbits}" in
-                               *serverAuth*)
-                                       openssl x509 -text -in "${f}" >> ca-bundle.crt
-                                       ;;
-                       esac
-
-                       if [ -n "$tbits" ]; then
-                               targs=""
-                               for t in ${tbits}; do
-                                       targs="${targs} -addtrust ${t}"
-                               done
-
-                               openssl x509 -text -in "${f}" -trustout $targs >> ca-bundle.trust.crt
-                       fi
+               ) > ca-bundle.trust.crt
+
+               # Collect all certs for p11-kit
+               for p in certs/*.tmp-p11-kit; do
+                       cat "${p}" >> ca-bundle.trust.p11-kit
                done
 
-               perl generate-cacerts.pl /usr/bin/keytool ../ca-bundle.crt
-               touch -r certdata.txt cacerts
+               trust extract \
+                       --overwrite \
+                       --comment \
+                       --filter=certificates \
+                       --format=openssl-bundle \
+                       ca-bundle.trust
+               cat ca-bundle.trust >> ca-bundle.trust.crt
+
+               trust extract \
+                       --overwrite \
+                       --comment \
+                       --filter=ca-anchors \
+                       --format=pem-bundle \
+                       --purpose=server-auth \
+                       ca-bundle
+               cat ca-bundle >> ca-bundle.crt
        end
 
        install
index c22946d38d25a8889c1251302c201dbbd159e773..a52ce9c740fd3521e728886288a2486935802652 100644 (file)
@@ -4,6 +4,7 @@
 # certdata2pem.py - splits certdata.txt into multiple files
 #
 # Copyright (C) 2009 Philipp Kern <pkern@debian.org>
+# Copyright (C) 2013 Kai Engert <kaie@redhat.com>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -25,12 +26,17 @@ import os.path
 import re
 import sys
 import textwrap
+import urllib.request, urllib.parse, urllib.error
+import subprocess
 
 objects = []
 
+def printable_serial(obj):
+  return ".".join([str(x) for x in obj['CKA_SERIAL_NUMBER']])
+
 # Dirty file parser.
 in_data, in_multiline, in_obj = False, False, False
-field, type, value, obj = None, None, None, dict()
+field, ftype, value, binval, obj = None, None, None, bytearray(), dict()
 for line in open('certdata.txt', 'r'):
     # Ignore the file header.
     if not in_data:
@@ -50,72 +56,55 @@ for line in open('certdata.txt', 'r'):
         continue
     if in_multiline:
         if not line.startswith('END'):
-            if type == 'MULTILINE_OCTAL':
+            if ftype == 'MULTILINE_OCTAL':
                 line = line.strip()
                 for i in re.finditer(r'\\([0-3][0-7][0-7])', line):
-                    value += chr(int(i.group(1), 8))
+                    integ = int(i.group(1), 8)
+                    binval.extend((integ).to_bytes(1, sys.byteorder))
+                obj[field] = binval
             else:
                 value += line
+                obj[field] = value
             continue
-        obj[field] = value
         in_multiline = False
         continue
     if line.startswith('CKA_CLASS'):
         in_obj = True
     line_parts = line.strip().split(' ', 2)
     if len(line_parts) > 2:
-        field, type = line_parts[0:2]
+        field, ftype = line_parts[0:2]
         value = ' '.join(line_parts[2:])
     elif len(line_parts) == 2:
-        field, type = line_parts
+        field, ftype = line_parts
         value = None
     else:
-        raise NotImplementedError, 'line_parts < 2 not supported.'
-    if type == 'MULTILINE_OCTAL':
+        raise NotImplementedError('line_parts < 2 not supported.\n' + line)
+    if ftype == 'MULTILINE_OCTAL':
         in_multiline = True
         value = ""
+        binval = bytearray()
         continue
     obj[field] = value
-if len(obj.items()) > 0:
+if len(list(obj.items())) > 0:
     objects.append(obj)
 
-# Read blacklist.
-blacklist = []
-if os.path.exists('blacklist.txt'):
-    for line in open('blacklist.txt', 'r'):
-        line = line.strip()
-        if line.startswith('#') or len(line) == 0:
-            continue
-        item = line.split('#', 1)[0].strip()
-        blacklist.append(item)
-
 # Build up trust database.
-trust = dict()
 trustmap = dict()
 for obj in objects:
-
     if obj['CKA_CLASS'] != 'CKO_NSS_TRUST':
         continue
-    if obj['CKA_LABEL'] in blacklist:
-        print "Certificate %s blacklisted, ignoring." % obj['CKA_LABEL']
-    elif obj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_TRUSTED_DELEGATOR':
-        trust[obj['CKA_LABEL']] = True
-    elif obj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_TRUSTED_DELEGATOR':
-        trust[obj['CKA_LABEL']] = True
-    elif obj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_TRUSTED_DELEGATOR':
-        trust[obj['CKA_LABEL']] = True
-    elif obj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_UNTRUSTED':
-        print '!'*74
-        print "UNTRUSTED BUT NOT BLACKLISTED CERTIFICATE FOUND: %s" % obj['CKA_LABEL']
-        print '!'*74
-        sys.exit(1)
-    else:
-        print "Ignoring certificate %s.  SAUTH=%s, EPROT=%s" % \
-              (obj['CKA_LABEL'], obj['CKA_TRUST_SERVER_AUTH'],
-               obj['CKA_TRUST_EMAIL_PROTECTION'])
-    label = obj['CKA_LABEL']
-    trustmap[label] = obj
-    print " added cert", label
+    key = obj['CKA_LABEL'] + printable_serial(obj)
+    trustmap[key] = obj
+    print(" added trust", key)
+
+# Build up cert database.
+certmap = dict()
+for obj in objects:
+    if obj['CKA_CLASS'] != 'CKO_CERTIFICATE':
+        continue
+    key = obj['CKA_LABEL'] + printable_serial(obj)
+    certmap[key] = obj
+    print(" added cert", key)
 
 def obj_to_filename(obj):
     label = obj['CKA_LABEL'][1:-1]
@@ -124,9 +113,31 @@ def obj_to_filename(obj):
         .replace('(', '=')\
         .replace(')', '=')\
         .replace(',', '_')
-    label = re.sub(r'\\x[0-9a-fA-F]{2}', lambda m:chr(int(m.group(0)[2:], 16)), label)
-    serial = ".".join(map(lambda x:str(ord(x)), obj['CKA_SERIAL_NUMBER']))
-    return label + ":" + serial + ".crt"
+    labelbytes = bytearray()
+    i = 0
+    imax = len(label)
+    while i < imax:
+        if i < imax-3 and label[i] == '\\' and label[i+1] == 'x':
+            labelbytes.extend(bytes.fromhex(label[i+2:i+4]))
+            i += 4
+            continue
+        labelbytes.extend(str.encode(label[i]))
+        i = i+1
+        continue
+    label = labelbytes.decode('utf-8')
+    serial = printable_serial(obj)
+    return label + ":" + serial
+
+def write_cert_ext_to_file(f, oid, value, public_key):
+    f.write("[p11-kit-object-v1]\n")
+    f.write("label: ");
+    f.write(tobj['CKA_LABEL'])
+    f.write("\n")
+    f.write("class: x-certificate-extension\n");
+    f.write("object-id: " + oid + "\n")
+    f.write("value: \"" + value + "\"\n")
+    f.write("modifiable: false\n");
+    f.write(public_key)
 
 trust_types = {
   "CKA_TRUST_DIGITAL_SIGNATURE": "digital-signature",
@@ -147,6 +158,18 @@ trust_types = {
   "CKA_TRUST_STEP_UP_APPROVED": "step-up-approved",
 }
 
+legacy_trust_types = {
+  "LEGACY_CKA_TRUST_SERVER_AUTH": "server-auth",
+  "LEGACY_CKA_TRUST_CODE_SIGNING": "code-signing",
+  "LEGACY_CKA_TRUST_EMAIL_PROTECTION": "email-protection",
+}
+
+legacy_to_real_trust_types = {
+  "LEGACY_CKA_TRUST_SERVER_AUTH": "CKA_TRUST_SERVER_AUTH",
+  "LEGACY_CKA_TRUST_CODE_SIGNING": "CKA_TRUST_CODE_SIGNING",
+  "LEGACY_CKA_TRUST_EMAIL_PROTECTION": "CKA_TRUST_EMAIL_PROTECTION",
+}
+
 openssl_trust = {
   "CKA_TRUST_SERVER_AUTH": "serverAuth",
   "CKA_TRUST_CLIENT_AUTH": "clientAuth",
@@ -154,29 +177,237 @@ openssl_trust = {
   "CKA_TRUST_EMAIL_PROTECTION": "emailProtection",
 }
 
-for obj in objects:
-    if obj['CKA_CLASS'] == 'CKO_CERTIFICATE':
-        print "producing cert file for " + obj['CKA_LABEL']
-        if not obj['CKA_LABEL'] in trust or not trust[obj['CKA_LABEL']]:
-            print " -> untrusted, ignoring"
-            continue
-        fname = obj_to_filename(obj)
-        f = open(fname, 'w')
+cert_distrust_types = {
+  "CKA_NSS_SERVER_DISTRUST_AFTER": "nss-server-distrust-after",
+  "CKA_NSS_EMAIL_DISTRUST_AFTER": "nss-email-distrust-after",
+}
+
+for tobj in objects:
+    if tobj['CKA_CLASS'] == 'CKO_NSS_TRUST':
+        key = tobj['CKA_LABEL'] + printable_serial(tobj)
+        print("producing trust for " + key)
         trustbits = []
+        distrustbits = []
         openssl_trustflags = []
-        tobj = trustmap[obj['CKA_LABEL']]
-        for t in trust_types.keys():
-            if tobj.has_key(t) and tobj[t] == 'CKT_NSS_TRUSTED_DELEGATOR':
+        openssl_distrustflags = []
+        legacy_trustbits = []
+        legacy_openssl_trustflags = []
+        for t in list(trust_types.keys()):
+            if t in tobj and tobj[t] == 'CKT_NSS_TRUSTED_DELEGATOR':
                 trustbits.append(t)
                 if t in openssl_trust:
                     openssl_trustflags.append(openssl_trust[t])
-        f.write("# trust=" + " ".join(trustbits) + "\n")
-        if openssl_trustflags:
-            f.write("# openssl-trust=" + " ".join(openssl_trustflags) + "\n")
-        f.write("-----BEGIN CERTIFICATE-----\n")
-        f.write("\n".join(textwrap.wrap(base64.b64encode(obj['CKA_VALUE']), 64)))
-        f.write("\n-----END CERTIFICATE-----\n")
-        print " -> written as '%s', trust = %s, openssl-trust = %s" % (fname, trustbits, openssl_trustflags)
+            if t in tobj and tobj[t] == 'CKT_NSS_NOT_TRUSTED':
+                distrustbits.append(t)
+                if t in openssl_trust:
+                    openssl_distrustflags.append(openssl_trust[t])
+
+        for t in list(legacy_trust_types.keys()):
+            if t in tobj and tobj[t] == 'CKT_NSS_TRUSTED_DELEGATOR':
+                real_t = legacy_to_real_trust_types[t]
+                legacy_trustbits.append(real_t)
+                if real_t in openssl_trust:
+                    legacy_openssl_trustflags.append(openssl_trust[real_t])
+            if t in tobj and tobj[t] == 'CKT_NSS_NOT_TRUSTED':
+                raise NotImplementedError('legacy distrust not supported.\n' + line)
+
+        fname = obj_to_filename(tobj)
+        try:
+            obj = certmap[key]
+        except:
+            obj = None
+
+        # optional debug code, that dumps the parsed input to files
+        #fulldump = "dump-" + fname
+        #dumpf = open(fulldump, 'w')
+        #dumpf.write(str(obj));
+        #dumpf.write(str(tobj));
+        #dumpf.close();
+
+        is_legacy = 0
+        if 'LEGACY_CKA_TRUST_SERVER_AUTH' in tobj or 'LEGACY_CKA_TRUST_EMAIL_PROTECTION' in tobj or 'LEGACY_CKA_TRUST_CODE_SIGNING' in tobj:
+            is_legacy = 1
+            if obj == None:
+                raise NotImplementedError('found legacy trust without certificate.\n' + line)
+
+            legacy_fname = "legacy-default/" + fname + ".crt"
+            f = open(legacy_fname, 'w')
+            f.write("# alias=%s\n"%tobj['CKA_LABEL'])
+            f.write("# trust=" + " ".join(legacy_trustbits) + "\n")
+            if legacy_openssl_trustflags:
+                f.write("# openssl-trust=" + " ".join(legacy_openssl_trustflags) + "\n")
+            f.write("-----BEGIN CERTIFICATE-----\n")
+            temp_encoded_b64 = base64.b64encode(obj['CKA_VALUE'])
+            temp_wrapped = textwrap.wrap(temp_encoded_b64.decode(), 64)
+            f.write("\n".join(temp_wrapped))
+            f.write("\n-----END CERTIFICATE-----\n")
+            f.close()
+
+            if 'CKA_TRUST_SERVER_AUTH' in tobj or 'CKA_TRUST_EMAIL_PROTECTION' in tobj or 'CKA_TRUST_CODE_SIGNING' in tobj:
+                legacy_fname = "legacy-disable/" + fname + ".crt"
+                f = open(legacy_fname, 'w')
+                f.write("# alias=%s\n"%tobj['CKA_LABEL'])
+                f.write("# trust=" + " ".join(trustbits) + "\n")
+                if openssl_trustflags:
+                    f.write("# openssl-trust=" + " ".join(openssl_trustflags) + "\n")
+                f.write("-----BEGIN CERTIFICATE-----\n")
+                f.write("\n".join(textwrap.wrap(base64.b64encode(obj['CKA_VALUE']), 64)))
+                f.write("\n-----END CERTIFICATE-----\n")
+                f.close()
+
+            # don't produce p11-kit output for legacy certificates
+            continue
+
+        pk = ''
+        cert_comment = ''
+        if obj != None:
+            # must extract the public key from the cert, let's use openssl
+            cert_fname = "cert-" + fname
+            fc = open(cert_fname, 'w')
+            fc.write("-----BEGIN CERTIFICATE-----\n")
+            temp_encoded_b64 = base64.b64encode(obj['CKA_VALUE'])
+            temp_wrapped = textwrap.wrap(temp_encoded_b64.decode(), 64)
+            fc.write("\n".join(temp_wrapped))
+            fc.write("\n-----END CERTIFICATE-----\n")
+            fc.close();
+            pk_fname = "pubkey-" + fname
+            fpkout = open(pk_fname, "w")
+            dump_pk_command = ["openssl", "x509", "-in", cert_fname, "-noout", "-pubkey"]
+            subprocess.call(dump_pk_command, stdout=fpkout)
+            fpkout.close()
+            with open (pk_fname, "r") as myfile:
+                pk=myfile.read()
+            # obtain certificate information suitable as a comment
+            comment_fname = "comment-" + fname
+            fcout = open(comment_fname, "w")
+            comment_command = ["openssl", "x509", "-in", cert_fname, "-noout", "-text"]
+            subprocess.call(comment_command, stdout=fcout)
+            fcout.close()
+            sed_command = ["sed", "--in-place", "s/^/#/", comment_fname]
+            subprocess.call(sed_command)
+            with open (comment_fname, "r", errors = 'replace') as myfile:
+                cert_comment=myfile.read()
+
+        fname += ".tmp-p11-kit"
+        f = open(fname, 'w')
+
+        if obj != None:
+            is_distrusted = False
+            has_server_trust = False
+            has_email_trust = False
+            has_code_trust = False
+
+            if 'CKA_TRUST_SERVER_AUTH' in tobj:
+                if tobj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_NOT_TRUSTED':
+                    is_distrusted = True
+                elif tobj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_TRUSTED_DELEGATOR':
+                    has_server_trust = True
+
+            if 'CKA_TRUST_EMAIL_PROTECTION' in tobj:
+                if tobj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_NOT_TRUSTED':
+                    is_distrusted = True
+                elif tobj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_TRUSTED_DELEGATOR':
+                    has_email_trust = True
+
+            if 'CKA_TRUST_CODE_SIGNING' in tobj:
+                if tobj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_NOT_TRUSTED':
+                    is_distrusted = True
+                elif tobj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_TRUSTED_DELEGATOR':
+                    has_code_trust = True
+
+            if is_distrusted:
+                trust_ext_oid = "1.3.6.1.4.1.3319.6.10.1"
+                trust_ext_value = "0.%06%0a%2b%06%01%04%01%99w%06%0a%01%04 0%1e%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%01%06%08%2b%06%01%05%05%07%03%03"
+                write_cert_ext_to_file(f, trust_ext_oid, trust_ext_value, pk)
+
+            trust_ext_oid = "2.5.29.37"
+            if has_server_trust:
+                if has_email_trust:
+                    if has_code_trust:
+                        # server + email + code
+                        trust_ext_value = "0%2a%06%03U%1d%25%01%01%ff%04 0%1e%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%01%06%08%2b%06%01%05%05%07%03%03"
+                    else:
+                        # server + email
+                        trust_ext_value = "0 %06%03U%1d%25%01%01%ff%04%160%14%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%01"
+                else:
+                    if has_code_trust:
+                        # server + code
+                        trust_ext_value = "0 %06%03U%1d%25%01%01%ff%04%160%14%06%08%2b%06%01%05%05%07%03%01%06%08%2b%06%01%05%05%07%03%03"
+                    else:
+                        # server
+                        trust_ext_value = "0%16%06%03U%1d%25%01%01%ff%04%0c0%0a%06%08%2b%06%01%05%05%07%03%01"
+            else:
+                if has_email_trust:
+                    if has_code_trust:
+                        # email + code
+                        trust_ext_value = "0 %06%03U%1d%25%01%01%ff%04%160%14%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%03"
+                    else:
+                        # email
+                        trust_ext_value = "0%16%06%03U%1d%25%01%01%ff%04%0c0%0a%06%08%2b%06%01%05%05%07%03%04"
+                else:
+                    if has_code_trust:
+                        # code
+                        trust_ext_value = "0%16%06%03U%1d%25%01%01%ff%04%0c0%0a%06%08%2b%06%01%05%05%07%03%03"
+                    else:
+                        # none
+                        trust_ext_value = "0%18%06%03U%1d%25%01%01%ff%04%0e0%0c%06%0a%2b%06%01%04%01%99w%06%0a%10"
+
+            # no 2.5.29.37 for neutral certificates
+            if (is_distrusted or has_server_trust or has_email_trust or has_code_trust):
+                write_cert_ext_to_file(f, trust_ext_oid, trust_ext_value, pk)
+
+            pk = ''
+            f.write("\n")
+
+            f.write("[p11-kit-object-v1]\n")
+            f.write("label: ");
+            f.write(tobj['CKA_LABEL'])
+            f.write("\n")
+            if is_distrusted:
+                f.write("x-distrusted: true\n")
+            elif has_server_trust or has_email_trust or has_code_trust:
+                f.write("trusted: true\n")
+            else:
+                f.write("trusted: false\n")
+
+            # requires p11-kit >= 0.23.4
+            f.write("nss-mozilla-ca-policy: true\n")
+            f.write("modifiable: false\n");
 
+            # requires p11-kit >= 0.23.19
+            for t in list(cert_distrust_types.keys()):
+                if t in obj:
+                    value = obj[t]
+                    if value == 'CK_FALSE':
+                        value = bytearray(1)
+                    f.write(cert_distrust_types[t] + ": \"")
+                    f.write(urllib.parse.quote(value));
+                    f.write("\"\n")
 
+            f.write("-----BEGIN CERTIFICATE-----\n")
+            temp_encoded_b64 = base64.b64encode(obj['CKA_VALUE'])
+            temp_wrapped = textwrap.wrap(temp_encoded_b64.decode(), 64)
+            f.write("\n".join(temp_wrapped))
+            f.write("\n-----END CERTIFICATE-----\n")
+            f.write(cert_comment)
+            f.write("\n")
 
+        else:
+            f.write("[p11-kit-object-v1]\n")
+            f.write("label: ");
+            f.write(tobj['CKA_LABEL']);
+            f.write("\n")
+            f.write("class: certificate\n")
+            f.write("certificate-type: x-509\n")
+            f.write("modifiable: false\n");
+            f.write("issuer: \"");
+            f.write(urllib.parse.quote(tobj['CKA_ISSUER']));
+            f.write("\"\n")
+            f.write("serial-number: \"");
+            f.write(urllib.parse.quote(tobj['CKA_SERIAL_NUMBER']));
+            f.write("\"\n")
+            if (tobj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_NOT_TRUSTED') or (tobj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_NOT_TRUSTED') or (tobj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_NOT_TRUSTED'):
+              f.write("x-distrusted: true\n")
+            f.write("\n\n")
+        f.close()
+        print(" -> written as '%s', trust = %s, openssl-trust = %s, distrust = %s, openssl-distrust = %s" % (fname, trustbits, openssl_trustflags, distrustbits, openssl_distrustflags))
diff --git a/ca-certificates/generate-cacerts.pl b/ca-certificates/generate-cacerts.pl
deleted file mode 100755 (executable)
index 1860266..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/perl -w
-
-use diagnostics;
-use Fcntl;
-
-# Copyright (C) 2007, 2008 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# generate-cacerts.pl generates a JKS keystore named 'cacerts' from
-# OpenSSL's certificate bundle using OpenJDK's keytool.
-
-# First extract each of OpenSSL's bundled certificates into its own
-# aliased filename.
-$file = $ARGV[1];
-open(CERTS, $file);
-@certs = <CERTS>;
-close(CERTS);
-
-$pem_file_count = 0;
-$in_cert_block = 0;
-$write_current_cert = 1;
-foreach $cert (@certs)
-{
-    if ($cert =~ "Certificate:\n")
-    {
-        print "New certificate...\n";
-    }        
-    elsif ($cert =~ /Subject: /)
-    {
-        $_ = $cert;
-        if ($cert =~ /personal-freemail/)
-        {
-            $cert_alias = "thawtepersonalfreemailca";
-        }
-        elsif ($cert =~ /personal-basic/)
-        {
-            $cert_alias = "thawtepersonalbasicca";
-        }
-        elsif ($cert =~ /personal-premium/)
-        {
-            $cert_alias = "thawtepersonalpremiumca";
-        }
-        elsif ($cert =~ /server-certs/)
-        {
-            $cert_alias = "thawteserverca";
-        }
-        elsif ($cert =~ /premium-server/)
-        {
-            $cert_alias = "thawtepremiumserverca";
-        }
-        elsif ($cert =~ /Class 1 Public Primary Certification Authority$/)
-        {
-            $cert_alias = "verisignclass1ca";
-        }
-        elsif ($cert =~ /Class 1 Public Primary Certification Authority - G2/)
-        {
-            $cert_alias = "verisignclass1g2ca";
-        }
-        elsif ($cert =~
-               /VeriSign Class 1 Public Primary Certification Authority - G3/)
-        {
-            $cert_alias = "verisignclass1g3ca";
-        }
-        elsif ($cert =~ /Class 2 Public Primary Certification Authority$/)
-        {
-            $cert_alias = "verisignclass2ca";
-        }
-        elsif ($cert =~ /Class 2 Public Primary Certification Authority - G2/)
-        {
-            $cert_alias = "verisignclass2g2ca";
-        }
-        elsif ($cert =~
-               /VeriSign Class 2 Public Primary Certification Authority - G3/)
-        {
-            $cert_alias = "verisignclass2g3ca";
-        }
-        elsif ($cert =~ /Class 3 Public Primary Certification Authority$/)
-        {
-            $cert_alias = "verisignclass3ca";
-        }
-        # Version 1 of Class 3 Public Primary Certification Authority
-        # - G2 is added.  Version 3 is excluded.  See below.
-        elsif ($cert =~ /Class 3 Public Primary Certification Authority - G2.*1998/)
-        {
-            $cert_alias = "verisignclass3g2ca";
-        }
-        elsif ($cert =~
-               /VeriSign Class 3 Public Primary Certification Authority - G3/)
-        {
-            $cert_alias = "verisignclass3g3ca";
-        }
-        elsif ($cert =~
-               /RSA Data Security.*Secure Server Certification Authority/)
-        {
-            $cert_alias = "rsaserverca";
-        }
-        elsif ($cert =~ /GTE CyberTrust Global Root/)
-        {
-            $cert_alias = "gtecybertrustglobalca";
-        }
-        elsif ($cert =~ /Baltimore CyberTrust Root/)
-        {
-            $cert_alias = "baltimorecybertrustca";
-        }
-        elsif ($cert =~ /www.entrust.net\/Client_CA_Info\/CPS/)
-        {
-            $cert_alias = "entrustclientca";
-        }
-        elsif ($cert =~ /www.entrust.net\/GCCA_CPS/)
-        {
-            $cert_alias = "entrustglobalclientca";
-        }
-        elsif ($cert =~ /www.entrust.net\/CPS_2048/)
-        {
-            $cert_alias = "entrust2048ca";
-        }
-        elsif ($cert =~ /www.entrust.net\/CPS incorp /)
-        {
-            $cert_alias = "entrustsslca";
-        }
-        elsif ($cert =~ /www.entrust.net\/SSL_CPS/)
-        {
-            $cert_alias = "entrustgsslca";
-        }
-        elsif ($cert =~ /The Go Daddy Group/)
-        {
-            $cert_alias = "godaddyclass2ca";
-        }
-        elsif ($cert =~ /Starfield Class 2 Certification Authority/)
-        {
-            $cert_alias = "starfieldclass2ca";
-        }
-        elsif ($cert =~ /ValiCert Class 2 Policy Validation Authority/)
-        {
-            $cert_alias = "valicertclass2ca";
-        }
-        elsif ($cert =~ /GeoTrust Global CA$/)
-        {
-            $cert_alias = "geotrustglobalca";
-        }
-        elsif ($cert =~ /Equifax Secure Certificate Authority/)
-        {
-            $cert_alias = "equifaxsecureca";
-        }
-        elsif ($cert =~ /Equifax Secure eBusiness CA-1/)
-        {
-            $cert_alias = "equifaxsecureebusinessca1";
-        }
-        elsif ($cert =~ /Equifax Secure eBusiness CA-2/)
-        {
-            $cert_alias = "equifaxsecureebusinessca2";
-        }
-        elsif ($cert =~ /Equifax Secure Global eBusiness CA-1/)
-        {
-            $cert_alias = "equifaxsecureglobalebusinessca1";
-        }
-        elsif ($cert =~ /Sonera Class1 CA/)
-        {
-            $cert_alias = "soneraclass1ca";
-        }
-        elsif ($cert =~ /Sonera Class2 CA/)
-        {
-            $cert_alias = "soneraclass2ca";
-        }
-        elsif ($cert =~ /AAA Certificate Services/)
-        {
-            $cert_alias = "comodoaaaca";
-        }
-        elsif ($cert =~ /AddTrust Class 1 CA Root/)
-        {
-            $cert_alias = "addtrustclass1ca";
-        }
-        elsif ($cert =~ /AddTrust External CA Root/)
-        {
-            $cert_alias = "addtrustexternalca";
-        }
-        elsif ($cert =~ /AddTrust Qualified CA Root/)
-        {
-            $cert_alias = "addtrustqualifiedca";
-        }
-        elsif ($cert =~ /UTN-USERFirst-Hardware/)
-        {
-            $cert_alias = "utnuserfirsthardwareca";
-        }
-        elsif ($cert =~ /UTN-USERFirst-Client Authentication and Email/)
-        {
-            $cert_alias = "utnuserfirstclientauthemailca";
-        }
-        elsif ($cert =~ /UTN - DATACorp SGC/)
-        {
-            $cert_alias = "utndatacorpsgcca";
-        }
-        elsif ($cert =~ /UTN-USERFirst-Object/)
-        {
-            $cert_alias = "utnuserfirstobjectca";
-        }
-        elsif ($cert =~ /America Online Root Certification Authority 1/)
-        {
-            $cert_alias = "aolrootca1";
-        }
-        elsif ($cert =~ /DigiCert Assured ID Root CA/)
-        {
-            $cert_alias = "digicertassuredidrootca";
-        }
-        elsif ($cert =~ /DigiCert Global Root CA/)
-        {
-            $cert_alias = "digicertglobalrootca";
-        }
-        elsif ($cert =~ /DigiCert High Assurance EV Root CA/)
-        {
-            $cert_alias = "digicerthighassuranceevrootca";
-        }
-        elsif ($cert =~ /GlobalSign Root CA$/)
-        {
-            $cert_alias = "globalsignca";
-        }
-        elsif ($cert =~ /GlobalSign Root CA - R2/)
-        {
-            $cert_alias = "globalsignr2ca";
-        }
-        elsif ($cert =~ /Elektronik.*Kas.*2005/)
-        {
-            $cert_alias = "extra-elektronikkas2005";
-        }
-        elsif ($cert =~ /Muntaner 244 Barcelona.*Firmaprofesional/)
-        {
-            $cert_alias = "extra-oldfirmaprofesional";
-        }
-        # Mozilla does not provide these certificates:
-        #   baltimorecodesigningca
-        #   gtecybertrust5ca
-        #   trustcenterclass2caii
-        #   trustcenterclass4caii
-        #   trustcenteruniversalcai
-        else
-        {
-            # Generate an alias using the OU and CN attributes of the
-            # Subject field if both are present, otherwise use only the
-            # CN attribute.  The Subject field must have either the OU
-            # or the CN attribute.
-            $_ = $cert;
-            if ($cert =~ /OU=/)
-            {
-                s/Subject:.*?OU=//;
-                # Remove other occurrences of OU=.
-                s/OU=.*CN=//;
-                # Remove CN= if there were not other occurrences of OU=.
-                s/CN=//;
-                s/\/emailAddress.*//;
-                s/Certificate Authority/ca/g;
-                s/Certification Authority/ca/g;
-            }
-            elsif ($cert =~ /CN=/)
-            {
-                s/Subject:.*CN=//;
-                s/\/emailAddress.*//;
-                s/Certificate Authority/ca/g;
-                s/Certification Authority/ca/g;
-            }
-            s/\W//g;
-            tr/A-Z/a-z/;
-            $cert_alias = "extra-$_";
-        }
-        print "$cert => alias $cert_alias\n";
-    }
-    elsif ($cert =~ "Signature Algorithm: ecdsa")
-    {
-        # Ignore ECC certs since keytool rejects them
-        $write_current_cert = 0;
-        print " => ignoring ECC certificate\n";
-    }
-    elsif ($cert eq "-----BEGIN CERTIFICATE-----\n")
-    {
-        if ($in_cert_block != 0)
-        {
-            die "FAIL: $file is malformed.";
-        }
-        $in_cert_block = 1;
-        if ($write_current_cert == 1)
-        {
-            $pem_file_count++;
-            if (!sysopen(PEM, "$cert_alias.pem", O_WRONLY|O_CREAT|O_EXCL)) {
-                $cert_alias = "$cert_alias.1";
-                sysopen(PEM, "$cert_alias.1.pem", O_WRONLY|O_CREAT|O_EXCL)
-                    || die("FAIL: could not open file for $cert_alias.pem: $!");
-            }
-            print PEM $cert;
-            print " => writing $cert_alias.pem...\n";
-        }
-    }
-    elsif ($cert eq "-----END CERTIFICATE-----\n")
-    {
-        $in_cert_block = 0;
-        if ($write_current_cert == 1)
-        {
-            print PEM $cert;
-            close(PEM);
-        }
-        $write_current_cert = 1
-    }
-    else
-    {
-        if ($in_cert_block == 1 && $write_current_cert == 1)
-        {
-            print PEM $cert;
-        }
-    }
-}
-
-# Check that the correct number of .pem files were produced.
-@pem_files = <*.pem>;
-if (@pem_files != $pem_file_count)
-{
-    print "$pem_file_count != ".@pem_files."\n";
-    die "FAIL: Number of .pem files produced does not match".
-        " number of certs read from $file.";
-}
-
-# Now store each cert in the 'cacerts' file using keytool.
-$certs_written_count = 0;
-foreach $pem_file (@pem_files)
-{
-    print "+ Adding $pem_file...\n";
-    if (system("$ARGV[0] -import".
-               " -alias `basename $pem_file .pem`".
-               " -keystore cacerts -noprompt -storepass 'changeit' -file $pem_file") == 0) {
-        $certs_written_count++;
-    } else {
-        print "FAILED\n";
-    }
-}
-
-# Check that the correct number of certs were added to the keystore.
-if ($certs_written_count != $pem_file_count)
-{
-    die "FAIL: Number of certs added to keystore does not match".
-        " number of certs read from $file.";
-}