On Tue, Feb 26, 2013 at 11:00:52PM -0500, System Administrator wrote: > Has anyone been able to make a *usable* ssldump? > > When trying to run the stock 5.2 (amd64) package I always get > ERROR: Couldn't create network handler > According to my research, that error is a known symptom of blindly > building ssldump against any version of OpenSSL newer than 0.9.7 -- > i.e. the build process completes and a binary is generated but every > attempt to use it results in the above error. > > Unfortunately, my research has not turned up any published patches to > get over the problem... hoping someone else has had more success. > > Alternatively looking for suggestions for tools/methodology to diagnose > a failing reverse proxy connection to an https backend server (with > possibly a self-signed certificate)
Looking at FreeBSD's ports, in 2008 they added a patch to reinstate an option to use nroff, drop gmake as a dependency, and fix the error in creation of network hander. I created a simple patch based on the work to ssl/ssldecode.c that makes a small change, this makes ssldump start and listens without any errors. However, any time i visit an https page to test, the program hits a SIGSEGV: Program received signal SIGSEGV, Segmentation fault. strlen (str=0x58 <Address 0x58 out of bounds>) at /usr/src/lib/libc/string/strlen.c:43 I tried also using the FreeBSD patch for base/tcppack.c, and its included in the below diff, but it didn't seem to help anything. Maybe someone else can help further for that. I only tested on my laptop with a trunk(4) interface on i386. Also I tried to remove gmake as a dep but apparently FreeBSD's make must impliment stuff gmake has as it definitely fails without it here still. Cheers -ryan ? ssldump.diff Index: Makefile =================================================================== RCS file: /cvs/ports/net/ssldump/Makefile,v retrieving revision 1.13 diff -u -p -u -p -r1.13 Makefile --- Makefile 19 Nov 2010 22:31:38 -0000 1.13 +++ Makefile 27 Feb 2013 08:34:35 -0000 @@ -4,7 +4,7 @@ COMMENT= SSLv3/TLS network protocol anal VERSION= 0.9b3 DISTNAME= ssldump-${VERSION} -REVISION= 0 +REVISION= 1 CATEGORIES= net HOMEPAGE= http://www.rtfm.com/ssldump/ @@ -20,7 +20,7 @@ WANTLIB= c crypto m pcap ssl MASTER_SITES= http://www.rtfm.com/ssldump/ -USE_GMAKE= Yes +USE_GMAKE = Yes USE_GROFF = Yes CONFIGURE_STYLE= gnu dest CONFIGURE_ARGS+= --with-openssl-inc=/usr/include \ Index: patches/patch-base_tcppack_c =================================================================== RCS file: patches/patch-base_tcppack_c diff -N patches/patch-base_tcppack_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-base_tcppack_c 27 Feb 2013 08:34:36 -0000 @@ -0,0 +1,65 @@ +$OpenBSD$ +--- base/tcppack.c.orig Mon Sep 9 14:02:58 2002 ++++ base/tcppack.c Wed Feb 27 00:18:32 2013 +@@ -222,7 +222,6 @@ static int process_data_segment(conn,handler,p,stream, + int r,_status; + tcp_seq seq,right_edge; + segment _seg; +- segment *seg,*nseg=0; + long l; + + l=p->len - p->tcp->th_off * 4; +@@ -273,35 +272,39 @@ static int process_data_segment(conn,handler,p,stream, + if(SEQ_LT(stream->seq,seq)){ + /* Out of order segment */ + tcp_seq left_edge; ++ segment **ssn, *nseg=0; + +- for(seg=0;seg;seg=seg?seg->next:stream->oo_queue){ +- if(seg->next->s_seq > seq) ++ left_edge = seq; ++ for(ssn=&stream->oo_queue;*ssn;ssn=&(*ssn)->next){ ++ if((*ssn)->s_seq > seq) + break; ++ left_edge = (*ssn)->s_seq + (*ssn)->len; + } +- ++ /* ++ if seg == 0 ++ oo_queue is empty - place out of order segment into oo_queue ++ else ++ place out of order segment into oo_queue after seg ++ */ ++ + if(!(nseg=(segment *)calloc(sizeof(segment),1))) + ABORT(R_NO_MEMORY); + if(r=packet_copy(p,&nseg->p)) + ABORT(r); + nseg->s_seq=seq; +- ++ + /*Insert this segment into the reassembly queue*/ +- if(seg){ +- nseg->next=seg->next; +- seg->next=nseg; +- } +- else{ +- nseg->next=stream->oo_queue; +- stream->oo_queue=nseg; +- } ++ nseg->next = *ssn; ++ *ssn = nseg; + +- left_edge=seg?seg->s_seq:stream->seq; + STRIM(left_edge,nseg); + } + else{ + /*First segment -- just thread the unallocated data on the + list so we can pass to the analyzer*/ +- _seg.next=0; ++ segment _seg, *seg; ++ ++ _seg.next=stream->oo_queue; + _seg.p=p; + _seg.s_seq=seq; + Index: patches/patch-ssl_ssldecode_c =================================================================== RCS file: /cvs/ports/net/ssldump/patches/patch-ssl_ssldecode_c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 patch-ssl_ssldecode_c --- patches/patch-ssl_ssldecode_c 16 Jun 2002 19:43:39 -0000 1.1 +++ patches/patch-ssl_ssldecode_c 27 Feb 2013 08:34:37 -0000 @@ -1,6 +1,6 @@ $OpenBSD: patch-ssl_ssldecode_c,v 1.1 2002/06/16 19:43:39 pvalchev Exp $ ---- ssl/ssldecode.c.orig Sun Jun 16 13:41:46 2002 -+++ ssl/ssldecode.c Sun Jun 16 13:42:10 2002 +--- ssl/ssldecode.c.orig Fri Aug 16 18:33:17 2002 ++++ ssl/ssldecode.c Tue Feb 26 23:47:57 2013 @@ -51,6 +51,7 @@ #include <openssl/ssl.h> #include <openssl/hmac.h> @@ -9,3 +9,15 @@ $OpenBSD: patch-ssl_ssldecode_c,v 1.1 20 #include <openssl/x509v3.h> #endif #include "ssldecode.h" +@@ -130,8 +131,9 @@ int ssl_decode_ctx_create(dp,keyfile,pass) + #ifdef OPENSSL + ssl_decode_ctx *d=0; + int r,_status; +- +- SSLeay_add_all_algorithms(); ++ ++ SSL_library_init(); ++ OpenSSL_add_all_algorithms(); + if(!(d=(ssl_decode_ctx *)malloc(sizeof(ssl_decode_ctx)))) + ABORT(R_NO_MEMORY); + if(!(d->ssl_ctx=SSL_CTX_new(SSLv23_server_method())))