Index: dirb-2.22+dfsg/src/estructuras.h
===================================================================
--- dirb-2.22+dfsg.orig/src/estructuras.h
+++ dirb-2.22+dfsg/src/estructuras.h
@@ -52,6 +52,7 @@ struct opciones {
   int use_pass;
   int use_cookie;
   int path_as_is;
+  int use_client_certificate;
   int verify_ssl;
   int use_agent;
   int ignore_nec;
@@ -82,6 +83,7 @@ struct opciones {
   char exts_file[STRING_SIZE];
   char exts_list[STRING_SIZE];
   char proxy[STRING_SIZE];
+  char client_certificate[STRING_SIZE];
   char pass_string[STRING_SIZE];
   char proxypass_string[STRING_SIZE];
   char cookie[STRING_SIZE];
Index: dirb-2.22+dfsg/dirb.1
===================================================================
--- dirb-2.22+dfsg.orig/dirb.1
+++ dirb-2.22+dfsg/dirb.1
@@ -43,6 +43,10 @@ Don't squash or merge sequences of /../
 .RB 
 Set a cookie for the HTTP request.
 .TP
+.B -E <certificate>
+.RB
+Use the specified client certificate file.
+.TP
 .B -f
 .RB
 Fine tunning of NOT_FOUND (404) detection.
Index: dirb-2.22+dfsg/src/dirb.c
===================================================================
--- dirb-2.22+dfsg.orig/src/dirb.c
+++ dirb-2.22+dfsg/src/dirb.c
@@ -30,6 +30,7 @@ int main(int argc, char **argv) {
   options.speed=0;
   options.add_header=0;
   options.path_as_is=0;
+  options.use_client_certificate=0;
 
   encontradas=0;
   descargadas=0;
@@ -67,7 +68,7 @@ int main(int argc, char **argv) {
     optind+=2;
     }
 
-  while((c = getopt(argc,argv,"a:b:c:d:fgh:H:ilm:M:n:N:o:p:P:rRsSvwx:X:u:tz:"))!= -1){
+  while((c = getopt(argc,argv,"a:b:c:d:fgh:E:H:ilm:M:n:N:o:p:P:rRsSvwx:X:u:tz:"))!= -1){
     switch(c) {
       case 'a':
         options.use_agent=1;
@@ -83,6 +84,10 @@ int main(int argc, char **argv) {
       case 'd':
         options.debuging=atoi(optarg);
         break;
+      case 'E':
+        options.use_client_certificate=1;
+        strncpy(options.client_certificate, optarg, STRING_SIZE-1);
+        break;
       case 'f':
         options.finetunning=1;
         break;
@@ -260,6 +265,7 @@ void ayuda(void) {
   printf(" -b : Use path as is.\n");
   printf(" -c <cookie_string> : Set a cookie for the HTTP request.\n");
   // printf(" -d <debug_level> : Activate DEBUGing.\n");
+  printf(" -E <certificate> : path to the client certificate.\n");
   printf(" -f : Fine tunning of NOT_FOUND (404) detection.\n");
   // printf(" -g : Save found URLs to disk. (Still not implemented)\n")
   // printf(" -h <vhost_string> : Use your custom Virtual Host header.\n");
Index: dirb-2.22+dfsg/src/get_url.c
===================================================================
--- dirb-2.22+dfsg.orig/src/get_url.c
+++ dirb-2.22+dfsg/src/get_url.c
@@ -60,6 +60,10 @@ retry:
       curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1);
     }
 
+    if (options.use_client_certificate) {
+      curl_easy_setopt(curl, CURLOPT_SSLCERT, options.client_certificate);
+    }
+
     if(options.use_vhost) {
     strncpy(host_header, "Host: ", 6);
     strncat(host_header, options.vhost, STRING_SIZE-1-strlen(host_header));
Index: dirb-2.22+dfsg/src/options.c
===================================================================
--- dirb-2.22+dfsg.orig/src/options.c
+++ dirb-2.22+dfsg/src/options.c
@@ -64,6 +64,12 @@ void get_options(void) {
     IMPRIME("DEBUG_LEVEL: %d\n", options.debuging);
     }
 
+  // -E
+
+  if(options.use_client_certificate==1) {
+    IMPRIME("CLIENT_CERTIFICATE: %s\n", options.client_certificate);
+    }
+
   // -f
 
   if(options.finetunning==1) {
