You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2016/04/18 11:49:28 UTC

svn commit: r1739723 - in /tomcat/native/trunk/native: include/ssl_private.h src/sslcontext.c src/sslutils.c

Author: rjung
Date: Mon Apr 18 09:49:28 2016
New Revision: 1739723

URL: http://svn.apache.org/viewvc?rev=1739723&view=rev
Log:
Support for OpenSSL 1.1.0
- X509_STORE_CTX and X509_OBJECT are now opaque
This change is not yet complete. Currently I see
no API to access the CRLs in an X509_OBJECT.
I'll check the OpenSSL apps code for checking
a cert against CRLs to see, how they do it.
Probably we need to apply bigger changes to
ssl_verify_CRL().

Modified:
    tomcat/native/trunk/native/include/ssl_private.h
    tomcat/native/trunk/native/src/sslcontext.c
    tomcat/native/trunk/native/src/sslutils.c

Modified: tomcat/native/trunk/native/include/ssl_private.h
URL: http://svn.apache.org/viewvc/tomcat/native/trunk/native/include/ssl_private.h?rev=1739723&r1=1739722&r2=1739723&view=diff
==============================================================================
--- tomcat/native/trunk/native/include/ssl_private.h (original)
+++ tomcat/native/trunk/native/include/ssl_private.h Mon Apr 18 09:49:28 2016
@@ -205,19 +205,22 @@
 
 /* OpenSSL 1.0.2 compatibility */
 #if OPENSSL_VERSION_NUMBER < 0x10100000L
-#define TLS_method SSLv23_method
-#define TLS_client_method SSLv23_client_method
-#define TLS_server_method SSLv23_server_method
-#define OPENSSL_VERSION SSLEAY_VERSION
-#define OpenSSL_version SSLeay_version
-#define OPENSSL_malloc_init CRYPTO_malloc_init
+#define OpenSSL_version                  SSLeay_version
+#define OpenSSL_version_num              SSLeay
+#define OPENSSL_VERSION                  SSLEAY_VERSION
+#define OPENSSL_malloc_init              CRYPTO_malloc_init
+#define BIO_get_init(x)                  (x->init)
+#define BIO_set_init(x,v)                (x->init=v)
+#define BIO_get_data(x)                  (x->ptr)
+#define BIO_set_data(x,v)                (x->ptr=v)
+#define BIO_set_shutdown(x,v)            (x->shutdown=v)
 #define X509_REVOKED_get0_serialNumber(x) x->serialNumber
-#define OpenSSL_version_num SSLeay
-#define BIO_get_init(x)       (x->init)
-#define BIO_set_init(x,v)     (x->init=v)
-#define BIO_get_data(x)       (x->ptr)
-#define BIO_set_data(x,v)     (x->ptr=v)
-#define BIO_set_shutdown(x,v) (x->shutdown=v)
+#define X509_STORE_CTX_get0_untrusted(x) (x->untrusted)
+#define X509_OBJECT_free(x)              {X509_OBJECT_free_contents(obj);\
+                                          OPENSSL_free(obj);}
+#define TLS_method                       SSLv23_method
+#define TLS_client_method                SSLv23_client_method
+#define TLS_server_method                SSLv23_server_method
 #endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */
 
 #define MAX_ALPN_NPN_PROTO_SIZE 65535

Modified: tomcat/native/trunk/native/src/sslcontext.c
URL: http://svn.apache.org/viewvc/tomcat/native/trunk/native/src/sslcontext.c?rev=1739723&r1=1739722&r2=1739723&view=diff
==============================================================================
--- tomcat/native/trunk/native/src/sslcontext.c (original)
+++ tomcat/native/trunk/native/src/sslcontext.c Mon Apr 18 09:49:28 2016
@@ -1755,7 +1755,7 @@ static int SSL_cert_verify(X509_STORE_CT
 
 
     // Get a stack of all certs in the chain
-    STACK_OF(X509) *sk = ctx->untrusted;
+    STACK_OF(X509) *sk = X509_STORE_CTX_get0_untrusted(ctx);
 
     int len = sk_X509_num(sk);
     unsigned i;

Modified: tomcat/native/trunk/native/src/sslutils.c
URL: http://svn.apache.org/viewvc/tomcat/native/trunk/native/src/sslutils.c?rev=1739723&r1=1739722&r2=1739723&view=diff
==============================================================================
--- tomcat/native/trunk/native/src/sslutils.c (original)
+++ tomcat/native/trunk/native/src/sslutils.c Mon Apr 18 09:49:28 2016
@@ -288,20 +288,29 @@ int SSL_CTX_use_certificate_chain(SSL_CT
 }
 
 static int ssl_X509_STORE_lookup(X509_STORE *store, int yype,
-                                 X509_NAME *name, X509_OBJECT *obj)
+                                 X509_NAME *name, X509_OBJECT **obj)
 {
-    X509_STORE_CTX ctx;
+    X509_STORE_CTX *ctx;
     int rc;
 
-    X509_STORE_CTX_init(&ctx, store, NULL, NULL);
-    rc = X509_STORE_get_by_subject(&ctx, yype, name, obj);
-    X509_STORE_CTX_cleanup(&ctx);
+    ctx = X509_STORE_CTX_new();
+    X509_STORE_CTX_init(ctx, store, NULL, NULL);
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+    rc = X509_STORE_get_by_subject(ctx, yype, name, *obj);
+#else
+    *obj = X509_STORE_get_X509_by_subject(ctx, yype, name);
+    if (*obj == NULL) {
+        rc = -1;
+    }
+#endif
+    X509_STORE_CTX_cleanup(ctx);
+    X509_STORE_CTX_free(ctx);
     return rc;
 }
 
 static int ssl_verify_CRL(int ok, X509_STORE_CTX *ctx, tcn_ssl_conn_t *con)
 {
-    X509_OBJECT obj;
+    X509_OBJECT *obj;
     X509_NAME *subject, *issuer;
     X509 *cert;
     X509_CRL *crl;
@@ -350,10 +359,14 @@ static int ssl_verify_CRL(int ok, X509_S
      * Try to retrieve a CRL corresponding to the _subject_ of
      * the current certificate in order to verify it's integrity.
      */
-    memset((char *)&obj, 0, sizeof(obj));
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+    obj = OPENSSL_malloc(sizeof (*obj));
+    memset((char *)obj, 0, sizeof(*obj));
+#endif
     rc = ssl_X509_STORE_lookup(con->ctx->crl,
                                X509_LU_CRL, subject, &obj);
-    crl = obj.data.crl;
+    /* XXX obj is now OPAQUE */
+    crl = obj->data.crl;
 
     if ((rc > 0) && crl) {
         /*
@@ -371,7 +384,7 @@ static int ssl_verify_CRL(int ok, X509_S
         if (rc <= 0) {
             /* TODO: Log Invalid signature on CRL */
             X509_STORE_CTX_set_error(ctx, X509_V_ERR_CRL_SIGNATURE_FAILURE);
-            X509_OBJECT_free_contents(&obj);
+            X509_OBJECT_free(obj);
             return 0;
         }
 
@@ -385,30 +398,34 @@ static int ssl_verify_CRL(int ok, X509_S
 
             X509_STORE_CTX_set_error(ctx,
                                      X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD);
-            X509_OBJECT_free_contents(&obj);
+            X509_OBJECT_free(obj);
             return 0;
         }
 
         if (i < 0) {
             /* TODO: Log Found CRL is expired */
             X509_STORE_CTX_set_error(ctx, X509_V_ERR_CRL_HAS_EXPIRED);
-            X509_OBJECT_free_contents(&obj);
+            X509_OBJECT_free(obj);
 
             return 0;
         }
 
-        X509_OBJECT_free_contents(&obj);
+        X509_OBJECT_free(obj);
     }
 
     /*
      * Try to retrieve a CRL corresponding to the _issuer_ of
      * the current certificate in order to check for revocation.
      */
-    memset((char *)&obj, 0, sizeof(obj));
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+    obj = OPENSSL_malloc(sizeof (*obj));
+    memset((char *)obj, 0, sizeof(*obj));
+#endif
     rc = ssl_X509_STORE_lookup(con->ctx->crl,
                                X509_LU_CRL, issuer, &obj);
 
-    crl = obj.data.crl;
+    /* XXX obj is now OPAQUE */
+    crl = obj->data.crl;
     if ((rc > 0) && crl) {
         /*
          * Check if the current certificate is revoked by this CRL
@@ -423,13 +440,13 @@ static int ssl_verify_CRL(int ok, X509_S
 
             if (!ASN1_INTEGER_cmp(sn, X509_get_serialNumber(cert))) {
                 X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REVOKED);
-                X509_OBJECT_free_contents(&obj);
+                X509_OBJECT_free(obj);
 
                 return 0;
             }
         }
 
-        X509_OBJECT_free_contents(&obj);
+        X509_OBJECT_free(obj);
     }
 
     return ok;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org