]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Append keys on keylogfile
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 27 May 2016 20:19:40 +0000 (22:19 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 27 May 2016 20:21:13 +0000 (22:21 +0200)
Also consider the SSLKEYLOGFILE variable, since the format is
identical and we are always appending keys.

doc/cha-gtls-app.texi
lib/global.c
lib/global.h
lib/kx.c

index 9bb5437544894c63ab031057f5787924509d72c7..aebbca8a2c4552890fe1b0c0f81a304a912f0cc5 100644 (file)
@@ -165,8 +165,8 @@ error. Other available environment variables are shown in @ref{tab:environment}.
 @item @code{GNUTLS_DEBUG_LEVEL}
 @tab When set to a numeric value, it sets the default debugging level for GnuTLS applications.
 
-@item @code{GNUTLS_KEYLOGFILE}
-@tab When set to a filename, GnuTLS will store to it the client session keys in the NSS Key Log
+@item @code{GNUTLS_KEYLOGFILE}, @code{SSLKEYLOGFILE}
+@tab When set to a filename, GnuTLS will append to it the session keys in the NSS Key Log
 format. That format can be read by wireshark and will allow decryption of the session for debugging.
 
 @item @code{GNUTLS_CPUID_OVERRIDE}
index f55851e7ea94a9959e5fffd4d6a390ee88e447ac..79c46bcd812697175ab17e6d87a7be50b57a8195 100644 (file)
@@ -71,6 +71,7 @@ extern const ASN1_ARRAY_TYPE gnutls_asn1_tab[];
 extern const ASN1_ARRAY_TYPE pkix_asn1_tab[];
 void *_gnutls_file_mutex;
 void *_gnutls_pkcs11_mutex;
+const char *_gnutls_keylogfile = NULL;
 
 ASN1_TYPE _gnutls_pkix1_asn = ASN1_TYPE_EMPTY;
 ASN1_TYPE _gnutls_gnutls_asn = ASN1_TYPE_EMPTY;
@@ -241,6 +242,10 @@ int gnutls_global_init(void)
 
        _gnutls_switch_lib_state(LIB_STATE_INIT);
 
+       _gnutls_keylogfile = getenv("GNUTLS_KEYLOGFILE");
+       if (_gnutls_keylogfile == NULL)
+               _gnutls_keylogfile = getenv("SSLKEYLOGFILE");
+
        e = getenv("GNUTLS_DEBUG_LEVEL");
        if (e != NULL) {
                level = atoi(e);
index 45d8dcaff8752aab786765e9f2fca3f3ab29e462..8efa3b417b0c7f4e2f079d6077ca0bfe8e6b9638 100644 (file)
@@ -38,6 +38,8 @@ extern ASN1_TYPE _gnutls_gnutls_asn;
 #define _gnutls_get_gnutls_asn() ((ASN1_TYPE) _gnutls_gnutls_asn)
 #define _gnutls_get_pkix() ((ASN1_TYPE) _gnutls_pkix1_asn)
 
+extern const char *_gnutls_keylogfile;
+
 extern gnutls_log_func _gnutls_log_func;
 extern gnutls_audit_log_func _gnutls_audit_log_func;
 extern int _gnutls_log_level;
index 3da82e38cc11bb3356591bc486a4276e56f845dc..87a93f69069599f2076e0e1e0418bf8fcdf7b5a5 100644 (file)
--- a/lib/kx.c
+++ b/lib/kx.c
@@ -97,42 +97,24 @@ int _gnutls_generate_master(gnutls_session_t session, int keep_premaster)
 
 static void write_nss_key_log(gnutls_session_t session, const gnutls_datum_t *premaster)
 {
-       const char *filename;
        char buf[512];
+       char buf2[512];
        FILE *fp;
 
-       if (session->security_parameters.entity == GNUTLS_SERVER)
+       if (_gnutls_keylogfile == NULL)
                return;
 
-       filename = getenv("GNUTLS_KEYLOGFILE");
-
-       if (filename == NULL)
-               return;
-
-       fp = fopen(filename, "w");
+       fp = fopen(_gnutls_keylogfile, "a");
        if (fp == NULL)
                return;
 
-       if (session->security_parameters.kx_algorithm == GNUTLS_KX_RSA) {
-               fprintf(fp, "RSA %s ", 
-                       _gnutls_bin2hex(premaster->data,
-                                       premaster->size,
-                                       buf, sizeof(buf),
-                                       NULL));
-               fprintf(fp, "%s\n",
-                        _gnutls_bin2hex(session->security_parameters.
-                                        master_secret, GNUTLS_MASTER_SIZE,
-                                        buf, sizeof(buf), NULL));
-       }
-
-       fprintf(fp, "CLIENT_RANDOM %s ", 
+       fprintf(fp, "CLIENT_RANDOM %s %s\n", 
                 _gnutls_bin2hex(session->security_parameters.
                                 client_random, 32, buf,
-                                sizeof(buf), NULL));
-       fprintf(fp, "%s\n", 
+                                sizeof(buf), NULL),
                 _gnutls_bin2hex(session->security_parameters.
                                 master_secret, GNUTLS_MASTER_SIZE,
-                                buf, sizeof(buf), NULL));
+                                buf2, sizeof(buf2), NULL));
        fclose(fp);
 }