diff options
-rw-r--r-- | src/certtool.c | 4 | ||||
-rw-r--r-- | src/cli-gaa.c | 131 | ||||
-rw-r--r-- | src/cli-gaa.h | 52 | ||||
-rw-r--r-- | src/cli.c | 2 | ||||
-rw-r--r-- | src/cli.gaa | 5 | ||||
-rw-r--r-- | src/common.c | 18 |
6 files changed, 125 insertions, 87 deletions
diff --git a/src/certtool.c b/src/certtool.c index 9b50efb866..e7eb43a136 100644 --- a/src/certtool.c +++ b/src/certtool.c @@ -600,7 +600,7 @@ void certificate_info( void) sprintf(print, "%.2x ", (unsigned char) buffer[i]); print += 3; } - printf("Key ID: %s\n", printable); + printf("Public Key ID: %s\n", printable); } printf("\n"); @@ -656,7 +656,7 @@ void privkey_info( void) sprintf(print, "%.2x ", (unsigned char) buffer[i]); print += 3; } - printf("Key ID: %s\n", printable); + printf("Public Key ID: %s\n", printable); } printf("\n"); diff --git a/src/cli-gaa.c b/src/cli-gaa.c index 225e597a43..6ace4e17d7 100644 --- a/src/cli-gaa.c +++ b/src/cli-gaa.c @@ -135,6 +135,7 @@ void gaa_help(void) __gaa_helpsingle('f', "fingerprint", "", "Send the openpgp fingerprint, instead of the key."); __gaa_helpsingle(0, "disable-extensions", "", "Disable all the TLS extensions."); __gaa_helpsingle(0, "xml", "", "Print the certificate information in XML format."); + __gaa_helpsingle(0, "print-cert", "", "Print the certificate in PEM format."); __gaa_helpsingle('p', "port", "integer ", "The port to connect to."); __gaa_helpsingle(0, "recordsize", "integer ", "The maximum record size to advertize."); __gaa_helpsingle(0, "ciphers", "cipher1 cipher2... ", "Ciphers to enable."); @@ -171,56 +172,58 @@ typedef struct _gaainfo gaainfo; struct _gaainfo { -#line 106 "cli.gaa" +#line 109 "cli.gaa" char *rest_args; -#line 96 "cli.gaa" +#line 99 "cli.gaa" char *srp_passwd; -#line 93 "cli.gaa" +#line 96 "cli.gaa" char *srp_username; -#line 90 "cli.gaa" +#line 93 "cli.gaa" char *x509_certfile; -#line 87 "cli.gaa" +#line 90 "cli.gaa" char *x509_keyfile; -#line 84 "cli.gaa" +#line 87 "cli.gaa" char *pgp_certfile; -#line 81 "cli.gaa" +#line 84 "cli.gaa" char *pgp_trustdb; -#line 78 "cli.gaa" +#line 81 "cli.gaa" char *pgp_keyring; -#line 75 "cli.gaa" +#line 78 "cli.gaa" char *pgp_keyfile; -#line 72 "cli.gaa" +#line 75 "cli.gaa" char *x509_crlfile; -#line 69 "cli.gaa" +#line 72 "cli.gaa" char *x509_cafile; -#line 66 "cli.gaa" +#line 69 "cli.gaa" char **ctype; -#line 65 "cli.gaa" +#line 68 "cli.gaa" int nctype; -#line 62 "cli.gaa" +#line 65 "cli.gaa" char **kx; -#line 61 "cli.gaa" +#line 64 "cli.gaa" int nkx; -#line 58 "cli.gaa" +#line 61 "cli.gaa" char **macs; -#line 57 "cli.gaa" +#line 60 "cli.gaa" int nmacs; -#line 54 "cli.gaa" +#line 57 "cli.gaa" char **comp; -#line 53 "cli.gaa" +#line 56 "cli.gaa" int ncomp; -#line 50 "cli.gaa" +#line 53 "cli.gaa" char **proto; -#line 49 "cli.gaa" +#line 52 "cli.gaa" int nproto; -#line 46 "cli.gaa" +#line 49 "cli.gaa" char **ciphers; -#line 45 "cli.gaa" +#line 48 "cli.gaa" int nciphers; -#line 41 "cli.gaa" +#line 44 "cli.gaa" int record_size; -#line 38 "cli.gaa" +#line 41 "cli.gaa" int port; +#line 38 "cli.gaa" + int print_cert; #line 35 "cli.gaa" int xml; #line 32 "cli.gaa" @@ -291,7 +294,7 @@ int gaa_error = 0; #define GAA_MULTIPLE_OPTION 3 #define GAA_REST 0 -#define GAA_NB_OPTION 30 +#define GAA_NB_OPTION 31 #define GAAOPTID_copyright 1 #define GAAOPTID_version 2 #define GAAOPTID_help 3 @@ -314,14 +317,15 @@ int gaa_error = 0; #define GAAOPTID_ciphers 20 #define GAAOPTID_recordsize 21 #define GAAOPTID_port 22 -#define GAAOPTID_xml 23 -#define GAAOPTID_disable_extensions 24 -#define GAAOPTID_fingerprint 25 -#define GAAOPTID_x509fmtder 26 -#define GAAOPTID_crlf 27 -#define GAAOPTID_starttls 28 -#define GAAOPTID_resume 29 -#define GAAOPTID_debug 30 +#define GAAOPTID_print_cert 23 +#define GAAOPTID_xml 24 +#define GAAOPTID_disable_extensions 25 +#define GAAOPTID_fingerprint 26 +#define GAAOPTID_x509fmtder 27 +#define GAAOPTID_crlf 28 +#define GAAOPTID_starttls 29 +#define GAAOPTID_resume 30 +#define GAAOPTID_debug 31 #line 168 "gaa.skel" @@ -683,6 +687,7 @@ int gaa_get_option_num(char *str, int status) GAA_CHECK1STR("v", GAAOPTID_version); GAA_CHECK1STR("h", GAAOPTID_help); GAA_CHECK1STR("l", GAAOPTID_list); + GAA_CHECK1STR("", GAAOPTID_print_cert); GAA_CHECK1STR("", GAAOPTID_xml); GAA_CHECK1STR("", GAAOPTID_disable_extensions); GAA_CHECK1STR("f", GAAOPTID_fingerprint); @@ -716,6 +721,7 @@ int gaa_get_option_num(char *str, int status) GAA_CHECKSTR("ciphers", GAAOPTID_ciphers); GAA_CHECKSTR("recordsize", GAAOPTID_recordsize); GAA_CHECKSTR("port", GAAOPTID_port); + GAA_CHECKSTR("print-cert", GAAOPTID_print_cert); GAA_CHECKSTR("xml", GAAOPTID_xml); GAA_CHECKSTR("disable-extensions", GAAOPTID_disable_extensions); GAA_CHECKSTR("fingerprint", GAAOPTID_fingerprint); @@ -777,28 +783,28 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) { case GAAOPTID_copyright: OK = 0; -#line 104 "cli.gaa" +#line 107 "cli.gaa" { print_license(); exit(0); ;}; return GAA_OK; break; case GAAOPTID_version: OK = 0; -#line 103 "cli.gaa" +#line 106 "cli.gaa" { cli_version(); exit(0); ;}; return GAA_OK; break; case GAAOPTID_help: OK = 0; -#line 101 "cli.gaa" +#line 104 "cli.gaa" { gaa_help(); exit(0); ;}; return GAA_OK; break; case GAAOPTID_list: OK = 0; -#line 100 "cli.gaa" +#line 103 "cli.gaa" { print_list(); exit(0); ;}; return GAA_OK; @@ -808,7 +814,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_srppasswd.arg1, gaa_getstr, GAATMP_srppasswd.size1); gaa_index++; -#line 97 "cli.gaa" +#line 100 "cli.gaa" { gaaval->srp_passwd = GAATMP_srppasswd.arg1 ;}; return GAA_OK; @@ -818,7 +824,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_srpusername.arg1, gaa_getstr, GAATMP_srpusername.size1); gaa_index++; -#line 94 "cli.gaa" +#line 97 "cli.gaa" { gaaval->srp_username = GAATMP_srpusername.arg1 ;}; return GAA_OK; @@ -828,7 +834,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_x509certfile.arg1, gaa_getstr, GAATMP_x509certfile.size1); gaa_index++; -#line 91 "cli.gaa" +#line 94 "cli.gaa" { gaaval->x509_certfile = GAATMP_x509certfile.arg1 ;}; return GAA_OK; @@ -838,7 +844,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_x509keyfile.arg1, gaa_getstr, GAATMP_x509keyfile.size1); gaa_index++; -#line 88 "cli.gaa" +#line 91 "cli.gaa" { gaaval->x509_keyfile = GAATMP_x509keyfile.arg1 ;}; return GAA_OK; @@ -848,7 +854,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pgpcertfile.arg1, gaa_getstr, GAATMP_pgpcertfile.size1); gaa_index++; -#line 85 "cli.gaa" +#line 88 "cli.gaa" { gaaval->pgp_certfile = GAATMP_pgpcertfile.arg1 ;}; return GAA_OK; @@ -858,7 +864,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pgptrustdb.arg1, gaa_getstr, GAATMP_pgptrustdb.size1); gaa_index++; -#line 82 "cli.gaa" +#line 85 "cli.gaa" { gaaval->pgp_trustdb = GAATMP_pgptrustdb.arg1 ;}; return GAA_OK; @@ -868,7 +874,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pgpkeyring.arg1, gaa_getstr, GAATMP_pgpkeyring.size1); gaa_index++; -#line 79 "cli.gaa" +#line 82 "cli.gaa" { gaaval->pgp_keyring = GAATMP_pgpkeyring.arg1 ;}; return GAA_OK; @@ -878,7 +884,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pgpkeyfile.arg1, gaa_getstr, GAATMP_pgpkeyfile.size1); gaa_index++; -#line 76 "cli.gaa" +#line 79 "cli.gaa" { gaaval->pgp_keyfile = GAATMP_pgpkeyfile.arg1 ;}; return GAA_OK; @@ -888,7 +894,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_x509crlfile.arg1, gaa_getstr, GAATMP_x509crlfile.size1); gaa_index++; -#line 73 "cli.gaa" +#line 76 "cli.gaa" { gaaval->x509_crlfile = GAATMP_x509crlfile.arg1 ;}; return GAA_OK; @@ -898,7 +904,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_x509cafile.arg1, gaa_getstr, GAATMP_x509cafile.size1); gaa_index++; -#line 70 "cli.gaa" +#line 73 "cli.gaa" { gaaval->x509_cafile = GAATMP_x509cafile.arg1 ;}; return GAA_OK; @@ -906,7 +912,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) case GAAOPTID_ctypes: OK = 0; GAA_LIST_FILL(GAATMP_ctypes.arg1, gaa_getstr, char*, GAATMP_ctypes.size1); -#line 67 "cli.gaa" +#line 70 "cli.gaa" { gaaval->ctype = GAATMP_ctypes.arg1; gaaval->nctype = GAATMP_ctypes.size1 ;}; return GAA_OK; @@ -914,7 +920,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) case GAAOPTID_kx: OK = 0; GAA_LIST_FILL(GAATMP_kx.arg1, gaa_getstr, char*, GAATMP_kx.size1); -#line 63 "cli.gaa" +#line 66 "cli.gaa" { gaaval->kx = GAATMP_kx.arg1; gaaval->nkx = GAATMP_kx.size1 ;}; return GAA_OK; @@ -922,7 +928,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) case GAAOPTID_macs: OK = 0; GAA_LIST_FILL(GAATMP_macs.arg1, gaa_getstr, char*, GAATMP_macs.size1); -#line 59 "cli.gaa" +#line 62 "cli.gaa" { gaaval->macs = GAATMP_macs.arg1; gaaval->nmacs = GAATMP_macs.size1 ;}; return GAA_OK; @@ -930,7 +936,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) case GAAOPTID_comp: OK = 0; GAA_LIST_FILL(GAATMP_comp.arg1, gaa_getstr, char*, GAATMP_comp.size1); -#line 55 "cli.gaa" +#line 58 "cli.gaa" { gaaval->comp = GAATMP_comp.arg1; gaaval->ncomp = GAATMP_comp.size1 ;}; return GAA_OK; @@ -938,7 +944,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) case GAAOPTID_protocols: OK = 0; GAA_LIST_FILL(GAATMP_protocols.arg1, gaa_getstr, char*, GAATMP_protocols.size1); -#line 51 "cli.gaa" +#line 54 "cli.gaa" { gaaval->proto = GAATMP_protocols.arg1; gaaval->nproto = GAATMP_protocols.size1 ;}; return GAA_OK; @@ -946,7 +952,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) case GAAOPTID_ciphers: OK = 0; GAA_LIST_FILL(GAATMP_ciphers.arg1, gaa_getstr, char*, GAATMP_ciphers.size1); -#line 47 "cli.gaa" +#line 50 "cli.gaa" { gaaval->ciphers = GAATMP_ciphers.arg1; gaaval->nciphers = GAATMP_ciphers.size1 ;}; return GAA_OK; @@ -956,7 +962,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_recordsize.arg1, gaa_getint, GAATMP_recordsize.size1); gaa_index++; -#line 42 "cli.gaa" +#line 45 "cli.gaa" { gaaval->record_size = GAATMP_recordsize.arg1 ;}; return GAA_OK; @@ -966,11 +972,18 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_port.arg1, gaa_getint, GAATMP_port.size1); gaa_index++; -#line 39 "cli.gaa" +#line 42 "cli.gaa" { gaaval->port = GAATMP_port.arg1 ;}; return GAA_OK; break; + case GAAOPTID_print_cert: + OK = 0; +#line 39 "cli.gaa" +{ gaaval->print_cert = 1 ;}; + + return GAA_OK; + break; case GAAOPTID_xml: OK = 0; #line 36 "cli.gaa" @@ -1034,7 +1047,7 @@ int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAAREST_tmp.arg1, gaa_getstr, GAAREST_tmp.size1); gaa_index++; -#line 107 "cli.gaa" +#line 110 "cli.gaa" { gaaval->rest_args = GAAREST_tmp.arg1; ;}; return GAA_OK; @@ -1063,7 +1076,7 @@ int gaa(int argc, char **argv, gaainfo *gaaval) if(inited == 0) { -#line 109 "cli.gaa" +#line 112 "cli.gaa" { gaaval->resume=0; gaaval->port=443; gaaval->rest_args=NULL; gaaval->ciphers=NULL; gaaval->kx=NULL; gaaval->comp=NULL; gaaval->macs=NULL; gaaval->ctype=NULL; gaaval->nciphers=0; gaaval->nkx=0; gaaval->ncomp=0; gaaval->nmacs=0; gaaval->nctype = 0; gaaval->record_size=0; @@ -1071,7 +1084,7 @@ int gaa(int argc, char **argv, gaainfo *gaaval) gaaval->x509_cafile = NULL; gaaval->pgp_keyfile=NULL; gaaval->pgp_certfile=NULL; gaaval->disable_extensions = 0; gaaval->x509_keyfile=NULL; gaaval->x509_certfile=NULL; gaaval->crlf = 0; gaaval->xml = 0; gaaval->srp_username=NULL; gaaval->srp_passwd=NULL; gaaval->fmtder = 0; gaaval->starttls =0; - gaaval->debug = 0; ;}; + gaaval->debug = 0; gaaval->print_cert = 0; ;}; } inited = 1; diff --git a/src/cli-gaa.h b/src/cli-gaa.h index a9cd209fa0..01b022f90d 100644 --- a/src/cli-gaa.h +++ b/src/cli-gaa.h @@ -8,56 +8,58 @@ typedef struct _gaainfo gaainfo; struct _gaainfo { -#line 106 "cli.gaa" +#line 109 "cli.gaa" char *rest_args; -#line 96 "cli.gaa" +#line 99 "cli.gaa" char *srp_passwd; -#line 93 "cli.gaa" +#line 96 "cli.gaa" char *srp_username; -#line 90 "cli.gaa" +#line 93 "cli.gaa" char *x509_certfile; -#line 87 "cli.gaa" +#line 90 "cli.gaa" char *x509_keyfile; -#line 84 "cli.gaa" +#line 87 "cli.gaa" char *pgp_certfile; -#line 81 "cli.gaa" +#line 84 "cli.gaa" char *pgp_trustdb; -#line 78 "cli.gaa" +#line 81 "cli.gaa" char *pgp_keyring; -#line 75 "cli.gaa" +#line 78 "cli.gaa" char *pgp_keyfile; -#line 72 "cli.gaa" +#line 75 "cli.gaa" char *x509_crlfile; -#line 69 "cli.gaa" +#line 72 "cli.gaa" char *x509_cafile; -#line 66 "cli.gaa" +#line 69 "cli.gaa" char **ctype; -#line 65 "cli.gaa" +#line 68 "cli.gaa" int nctype; -#line 62 "cli.gaa" +#line 65 "cli.gaa" char **kx; -#line 61 "cli.gaa" +#line 64 "cli.gaa" int nkx; -#line 58 "cli.gaa" +#line 61 "cli.gaa" char **macs; -#line 57 "cli.gaa" +#line 60 "cli.gaa" int nmacs; -#line 54 "cli.gaa" +#line 57 "cli.gaa" char **comp; -#line 53 "cli.gaa" +#line 56 "cli.gaa" int ncomp; -#line 50 "cli.gaa" +#line 53 "cli.gaa" char **proto; -#line 49 "cli.gaa" +#line 52 "cli.gaa" int nproto; -#line 46 "cli.gaa" +#line 49 "cli.gaa" char **ciphers; -#line 45 "cli.gaa" +#line 48 "cli.gaa" int nciphers; -#line 41 "cli.gaa" +#line 44 "cli.gaa" int record_size; -#line 38 "cli.gaa" +#line 41 "cli.gaa" int port; +#line 38 "cli.gaa" + int print_cert; #line 35 "cli.gaa" int xml; #line 32 "cli.gaa" @@ -59,6 +59,7 @@ int fingerprint; int crlf; int quiet = 0; extern int xml; +extern int print_cert; char *srp_passwd = NULL; char *srp_username; @@ -504,6 +505,7 @@ void gaa_parser(int argc, char **argv) debug = info.debug; disable_extensions = info.disable_extensions; xml = info.xml; + print_cert = info.print_cert; starttls = info.starttls; resume = info.resume; port = info.port; diff --git a/src/cli.gaa b/src/cli.gaa index da853449bd..412b412b67 100644 --- a/src/cli.gaa +++ b/src/cli.gaa @@ -35,6 +35,9 @@ option ( disable-extensions) { $disable_extensions = 1 } "Disable all the TLS ex #int xml; option (xml) { $xml = 1 } "Print the certificate information in XML format." +#int print_cert; +option (print-cert) { $print_cert = 1 } "Print the certificate in PEM format." + #int port; option (p, port) INT "integer" { $port = $1 } "The port to connect to." @@ -113,6 +116,6 @@ init { $resume=0; $port=443; $rest_args=NULL; $ciphers=NULL; $x509_cafile = NULL; $pgp_keyfile=NULL; $pgp_certfile=NULL; $disable_extensions = 0; $x509_keyfile=NULL; $x509_certfile=NULL; $crlf = 0; $xml = 0; $srp_username=NULL; $srp_passwd=NULL; $fmtder = 0; $starttls =0; - $debug = 0; } + $debug = 0; $print_cert = 0; } diff --git a/src/common.c b/src/common.c index 38544bcb79..9a070f6beb 100644 --- a/src/common.c +++ b/src/common.c @@ -11,6 +11,9 @@ #define TEST_STRING int xml = 0; +int print_cert; + +static char buffer[5*1024]; #define PRINTX(x,y) if (y[0]!=0) printf(" # %s %s\n", x, y) #define PRINT_PGP_NAME(X) PRINTX( "NAME:", name) @@ -72,6 +75,21 @@ void print_x509_info(gnutls_session session, const char* hostname) } printf(" - Certificate[%d] info:\n", j); + + if (print_cert) { + size_t size; + + size = sizeof(buffer); + + ret = gnutls_x509_crt_export( crt, GNUTLS_X509_FMT_PEM, buffer, &size); + if (ret < 0) { + fprintf(stderr, "Encoding error: %s\n", gnutls_strerror(ret)); + return; + } + fputs( "\n", stdout); + fputs( buffer, stdout); + fputs( "\n", stdout); + } if (j==0 && hostname != NULL) { /* Check the hostname of the first certificate * if it matches the name of the host we |