[openssl-users] [PATCH] apps: when -purpose is passed, set matching trust param

Adam Williamson awilliam at redhat.com
Fri Jan 16 07:44:36 UTC 2015


All the necessary bits are in place to make this possible,
they just never got wired up. With this, for instance, when
you use the 'verify' sub-command to verify a certificate
chain with '-purpose sslserver', error 28 will occur if the
root cert is not trusted for X509_TRUST_SSL_SERVER. This
matches the behaviour of actual SSL client code (e.g.
's_client') more closely.

This is a follow-up to my last couple of mails where I worked
all this stuff out; it turns out it's actually (seemingly)
pretty trivial to go ahead and hook up the appropriate trust
param when -purpose is passed. I tested this in the setup
described in my earlier emails; verify functions as expected
in that case.
---
 apps/apps.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/apps/apps.c b/apps/apps.c
index ac709a6..58a1b87 100644
--- a/apps/apps.c
+++ b/apps/apps.c
@@ -2383,7 +2383,7 @@ int args_verify(char ***pargs, int *pargc,
 	ASN1_OBJECT *otmp = NULL;
 	unsigned long flags = 0;
 	int i;
-	int purpose = 0, depth = -1;
+	int purpose = 0, trust = 0, depth = -1;
 	char **oldargs = *pargs;
 	char *arg = **pargs, *argn = (*pargs)[1];
 	const X509_VERIFY_PARAM *vpm = NULL;
@@ -2424,6 +2424,7 @@ int args_verify(char ***pargs, int *pargc,
 				{
 				xptmp = X509_PURPOSE_get0(i);
 				purpose = X509_PURPOSE_get_id(xptmp);
+				trust = X509_PURPOSE_get_trust(xptmp);
 				}
 			}
 		(*pargs)++;
@@ -2564,6 +2565,9 @@ int args_verify(char ***pargs, int *pargc,
 	if (purpose)
 		X509_VERIFY_PARAM_set_purpose(*pm, purpose);
 
+	if (trust)
+		X509_VERIFY_PARAM_set_trust(*pm, trust);
+
 	if (depth >= 0)
 		X509_VERIFY_PARAM_set_depth(*pm, depth);
 
-- 
2.2.1



More information about the openssl-users mailing list