summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/certtool.c4
-rw-r--r--src/cli-gaa.c131
-rw-r--r--src/cli-gaa.h52
-rw-r--r--src/cli.c2
-rw-r--r--src/cli.gaa5
-rw-r--r--src/common.c18
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"
diff --git a/src/cli.c b/src/cli.c
index f574920c33..6bdc3d3f93 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -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