Update from 1.0.0-stable.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 26 Jun 2009 11:34:22 +0000 (11:34 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 26 Jun 2009 11:34:22 +0000 (11:34 +0000)
CHANGES
apps/apps.c
apps/x509.c
crypto/x509/x509_vfy.c
crypto/x509/x509_vfy.h
doc/apps/verify.pod

diff --git a/CHANGES b/CHANGES
index 30df42765c99dc37a13d2f35d39e0f32d7ceba3a..e60f704aac1b8d0c296079f12dbf1b5b909a8560 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -9,9 +9,10 @@
      clash.
      [Guenter <lists@gknw.net>]
 
-  *) Don't check self signed certificate signatures in X509_verify_cert():
-     it just wastes time without adding any security. As a useful side effect
-     self signed root CAs with non-FIPS digests are now usable in FIPS mode.
+  *) Don't check self signed certificate signatures in X509_verify_cert()
+     by default (a flag can override this): it just wastes time without
+     adding any security. As a useful side effect self signed root CAs
+     with non-FIPS digests are now usable in FIPS mode.
      [Steve Henson]
 
   *) In dtls1_process_out_of_seq_message() the check if the current message
index 498722a5a2583bec73ac2ad4c534abd76e31ffb1..35b62b8b096e17898b01877de3988624f3a8ccf0 100644 (file)
@@ -2261,6 +2261,8 @@ int args_verify(char ***pargs, int *pargc,
                flags |= X509_V_FLAG_X509_STRICT;
        else if (!strcmp(arg, "-policy_print"))
                flags |= X509_V_FLAG_NOTIFY_POLICY;
+       else if (!strcmp(arg, "-check_ss_sig"))
+               flags |= X509_V_FLAG_CHECK_SS_SIGNATURE;
        else
                return 0;
 
index 6debce4419e45ef280d7ce4f905c91e1d69435dd..b25508aa8ed3db166714e21c7dfddcfc26c2cfa2 100644 (file)
@@ -1151,6 +1151,7 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
        /* NOTE: this certificate can/should be self signed, unless it was
         * a certificate request in which case it is not. */
        X509_STORE_CTX_set_cert(&xsc,x);
+       X509_STORE_CTX_set_flags(&xsc, X509_V_FLAG_CHECK_SS_SIGNATURE);
        if (!reqfile && X509_verify_cert(&xsc) <= 0)
                goto end;
 
index 9e398c2d19801eadb4e38fc4acce8ffc01d73846..b85456e65bc6aeb89b792c12ef5daf78f1f5452b 100644 (file)
@@ -987,10 +987,11 @@ static int internal_verify(X509_STORE_CTX *ctx)
                {
                ctx->error_depth=n;
 
-               /* Skip signature check for self signed certificates. It
-                * doesn't add any security and just wastes time.
+               /* Skip signature check for self signed certificates unless
+                * explicitly asked for. It doesn't add any security and
+                * just wastes time.
                 */
-               if (!xs->valid && xs != xi)
+               if (!xs->valid && (xs != xi || (ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE)))
                        {
                        if ((pkey=X509_get_pubkey(xi)) == NULL)
                                {
index 76c76e17193652a5fb379733e387ec777e8a29c6..86ae35f69d5fa3232fe64795d9c23ba774c8167b 100644 (file)
@@ -363,6 +363,9 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
 /* Notify callback that policy is OK */
 #define X509_V_FLAG_NOTIFY_POLICY              0x800
 
+/* Check selfsigned CA signature */
+#define X509_V_FLAG_CHECK_SS_SIGNATURE         0x4000
+
 #define X509_VP_FLAG_DEFAULT                   0x1
 #define X509_VP_FLAG_OVERWRITE                 0x2
 #define X509_VP_FLAG_RESET_FLAGS               0x4
index ff2629d2cf851733b4aa6c5704a4cf594137a74c..b7988673708d63058d1256365400fa3dc064089c 100644 (file)
@@ -66,6 +66,11 @@ certificate was rejected. However the presence of rejection messages
 does not itself imply that anything is wrong: during the normal
 verify process several rejections may take place.
 
+=item B<-check_ss_sig>
+
+Verify the signature on the self-signed root CA. This is disabled by default
+because it doesn't add any security.
+
 =item B<->
 
 marks the last option. All arguments following this are assumed to be