summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2018-02-23 19:48:11 +0000
committerMatt Caswell <matt@openssl.org>2018-03-15 13:32:23 +0000
commit23324ce79c5fdc1ccd042c43ee1ef88aa1f294bc (patch)
treee547c5ee7c901e0c73613b9d27b1da37e1bffc3d
parente0e77c556314d6db7416e060710605a4ebf8a5fd (diff)
Allow multiple entries without a Subject even if unique_subject == yes
It is quite likely for there to be multiple certificates with empty subjects, which are still distinct because of subjectAltName. Therefore we allow multiple certificates with an empty Subject even if unique_subject is set to yes. Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5627)
-rw-r--r--apps/ca.c19
-rw-r--r--doc/apps/ca.pod4
2 files changed, 23 insertions, 0 deletions
diff --git a/apps/ca.c b/apps/ca.c
index 82572a19b6..8596b5f520 100644
--- a/apps/ca.c
+++ b/apps/ca.c
@@ -1724,6 +1724,20 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509,
goto end;
}
+ if (row[DB_name][0] == '\0') {
+ /*
+ * An empty subject! We'll use the serial number instead. If
+ * unique_subject is in use then we don't want different entries with
+ * empty subjects matching each other.
+ */
+ OPENSSL_free(row[DB_name]);
+ row[DB_name] = OPENSSL_strdup(row[DB_serial]);
+ if (row[DB_name] == NULL) {
+ BIO_printf(bio_err, "Memory allocation failure\n");
+ goto end;
+ }
+ }
+
if (db->attributes.unique_subject) {
OPENSSL_STRING *crow = row;
@@ -2038,6 +2052,11 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value)
else
row[DB_serial] = BN_bn2hex(bn);
BN_free(bn);
+ if (row[DB_name] != NULL && row[DB_name][0] == '\0') {
+ /* Entries with empty Subjects actually use the serial number instead */
+ OPENSSL_free(row[DB_name]);
+ row[DB_name] = OPENSSL_strdup(row[DB_serial]);
+ }
if ((row[DB_name] == NULL) || (row[DB_serial] == NULL)) {
BIO_printf(bio_err, "Memory allocation failure\n");
goto end;
diff --git a/doc/apps/ca.pod b/doc/apps/ca.pod
index 944e57723d..b6578f1091 100644
--- a/doc/apps/ca.pod
+++ b/doc/apps/ca.pod
@@ -443,6 +443,10 @@ versions of OpenSSL. However, to make CA certificate roll-over easier,
it's recommended to use the value B<no>, especially if combined with
the B<-selfsign> command line option.
+Note that it is valid in some circumstances for certificates to be created
+without any subject. In the case where there are multiple certificates without
+subjects this does not count as a duplicate.
+
=item B<serial>
a text file containing the next serial number to use in hex. Mandatory.