--- ./client(orig).c	2014-04-12 20:55:57.000000000 +0200
+++ ./client.c	2014-08-04 14:16:38.824560757 +0200
@@ -1075,6 +1075,11 @@
     char *name, host[40];
     int fd[2], pid;
     X509 *peer;
+	unsigned char *digest;
+	unsigned int dig_len, i;
+	STACK_OF(GENERAL_NAME) *san_names;
+	GENERAL_NAME *san_name;
+	ASN1_OCTET_STRING *ip;
 #ifdef HAVE_PTHREAD_SIGMASK
     sigset_t newmask;
 #endif
@@ -1135,6 +1140,85 @@
                 name=X509_NAME_oneline(X509_get_issuer_name(peer), NULL, 0);
                 safestring(name);
                 putenv(str_printf("SSL_CLIENT_I_DN=%s", name));
+
+				/* calculate peer fingerprints using MD5 and SHA algorithms */
+				dig_len = 64;
+				digest = malloc(dig_len);
+				X509_digest(peer, EVP_md5(), digest, &dig_len);
+				name = str_printf("SSL_CLIENT_MD5=%02x:%02x:%02x:%02x", digest[0], digest[1], digest[2], digest[3]);
+				for (i = 4; i < dig_len; i += 4) {
+					name = str_printf("%s:%02x:%02x:%02x:%02x", name, digest[i], digest[i+1], digest[i+2], digest[i+3]);
+				}
+				putenv(name);
+
+				X509_digest(peer, EVP_sha1(), digest, &dig_len);
+				name = str_printf("SSL_CLIENT_SHA1=%02x:%02x:%02x:%02x", digest[0], digest[1], digest[2], digest[3]);
+				for (i = 4; i < dig_len; i += 4) {
+					name = str_printf("%s:%02x:%02x:%02x:%02x", name, digest[i], digest[i+1], digest[i+2], digest[i+3]);
+				}
+				putenv(name);
+
+				X509_digest(peer, EVP_sha224(), digest, &dig_len);
+				name = str_printf("SSL_CLIENT_SHA224=%02x:%02x:%02x:%02x", digest[0], digest[1], digest[2], digest[3]);
+				for (i = 4; i < dig_len; i += 4) {
+					name = str_printf("%s:%02x:%02x:%02x:%02x", name, digest[i], digest[i+1], digest[i+2], digest[i+3]);
+				}
+				putenv(name);
+
+				X509_digest(peer, EVP_sha256(), digest, &dig_len);
+				name = str_printf("SSL_CLIENT_SHA256=%02x:%02x:%02x:%02x", digest[0], digest[1], digest[2], digest[3]);
+				for (i = 4; i < dig_len; i += 4) {
+					name = str_printf("%s:%02x:%02x:%02x:%02x", name, digest[i], digest[i+1], digest[i+2], digest[i+3]);
+				}
+				putenv(name);
+
+				X509_digest(peer, EVP_sha384(), digest, &dig_len);
+				name = str_printf("SSL_CLIENT_SHA384=%02x:%02x:%02x:%02x", digest[0], digest[1], digest[2], digest[3]);
+				for (i = 4; i < dig_len; i += 4) {
+					name = str_printf("%s:%02x:%02x:%02x:%02x", name, digest[i], digest[i+1], digest[i+2], digest[i+3]);
+				}
+				putenv(name);
+
+				X509_digest(peer, EVP_sha512(), digest, &dig_len);
+				name = str_printf("SSL_CLIENT_SHA512=%02x:%02x:%02x:%02x", digest[0], digest[1], digest[2], digest[3]);
+				for (i = 4; i < dig_len; i += 4) {
+					name = str_printf("%s:%02x:%02x:%02x:%02x", name, digest[i], digest[i+1], digest[i+2], digest[i+3]);
+				}
+				putenv(name);
+				free(digest);
+
+				/* retrieve subjectAltName's rfc822Name (email), dNSName and iPAddress values */
+				san_names = X509_get_ext_d2i(peer, NID_subject_alt_name, NULL, NULL);
+				if (san_names != NULL) {
+					name = str_printf("SSL_CLIENT_SAN=");
+					for (i = 0; i < (unsigned) sk_GENERAL_NAME_num(san_names); ++i) {
+						san_name = sk_GENERAL_NAME_value(san_names, i);
+						if (san_name->type == GEN_EMAIL || san_name->type == GEN_DNS || san_name->type == GEN_IPADD) {
+							if (san_name->type == GEN_EMAIL) {
+								name = str_printf("%s/EMAIL=%s", name, (char*) ASN1_STRING_data(san_name->d.rfc822Name));
+							}
+							if (san_name->type == GEN_DNS) {
+								name = str_printf("%s/DNS=%s", name, (char*) ASN1_STRING_data(san_name->d.dNSName));
+							}
+							if (san_name->type == GEN_IPADD) {
+								ip = san_name->d.iPAddress;
+								if (ip->length == 4) {
+									name = str_printf("%s/IP=%d.%d.%d.%d", name, ip->data[0], ip->data[1], ip->data[2], ip->data[3]);
+								} else if (ip->length == 16) {
+									name = str_printf("%s/IP=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+										name, ip->data[0], ip->data[1], ip->data[2], ip->data[3], ip->data[4], ip->data[5],
+										ip->data[6], ip->data[7], ip->data[8], ip->data[9], ip->data[10], ip->data[11], ip->data[12],
+										ip->data[13], ip->data[14], ip->data[15]);
+								}
+							}
+						}
+					}
+					if (strlen(name) > 15) {
+						putenv(name);
+					}
+					sk_GENERAL_NAME_pop_free(san_names, GENERAL_NAME_free);
+				}
+
                 X509_free(peer);
             }
         }
