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