1.. _mozilla_projects_nss_reference_nss_tools_:_ssltab: 2 3NSS tools : ssltab 4================== 5 6.. container:: 7 8 Name 9 10 ssltap — Tap into SSL connections and display the data going by 11 12 Synopsis 13 14 libssltap [-vhfsxl] [-p port] [hostname:port] 15 16 Description 17 18 | The SSL Debugging Tool ssltap is an SSL-aware command-line proxy. It 19 | watches TCP connections and displays the data going by. If a connection is 20 | SSL, the data display includes interpreted SSL records and handshaking 21 22 Options 23 24 -v 25 26 Print a version string for the tool. 27 28 -h 29 30 | Turn on hex/ASCII printing. Instead of outputting raw data, the 31 | command interprets each record as a numbered line of hex values, 32 | followed by the same data as ASCII characters. The two parts are 33 | separated by a vertical bar. Nonprinting characters are replaced 34 | by dots. 35 36 -f 37 38 | Turn on fancy printing. Output is printed in colored HTML. Data 39 | sent from the client to the server is in blue; the server's reply 40 | is in red. When used with looping mode, the different connections 41 | are separated with horizontal lines. You can use this option to 42 | upload the output into a browser. 43 44 -s 45 46 | Turn on SSL parsing and decoding. The tool does not automatically 47 | detect SSL sessions. If you are intercepting an SSL connection, 48 | use this option so that the tool can detect and decode SSL 49 | structures. 50 51 | If the tool detects a certificate chain, it saves the DER-encoded 52 | certificates into files in the current directory. The files are 53 | named cert.0x, where x is the sequence number of the certificate. 54 55 | If the -s option is used with -h, two separate parts are printed 56 | for each record: the plain hex/ASCII output, and the parsed SSL 57 | output. 58 59 -x 60 61 | Turn on hex/ASCII printing of undecoded data inside parsed SSL 62 | records. Used only with the -s option. This option uses the same 63 | output format as the -h option. 64 65 -l prefix 66 67 | Turn on looping; that is, continue to accept connections rather 68 | than stopping after the first connection is complete. 69 70 -p port 71 72 Change the default rendezvous port (1924) to another port. 73 74 The following are well-known port numbers: 75 76 \* HTTP 80 77 78 \* HTTPS 443 79 80 \* SMTP 25 81 82 \* FTP 21 83 84 \* IMAP 143 85 86 \* IMAPS 993 (IMAP over SSL) 87 88 \* NNTP 119 89 90 \* NNTPS 563 (NNTP over SSL) 91 92 Usage and Examples 93 94 | You can use the SSL Debugging Tool to intercept any connection 95 | information. Although you can run the tool at its most basic by issuing 96 | the ssltap command with no options other than hostname:port, the 97 | information you get in this way is not very useful. For example, assume 98 | your development machine is called intercept. The simplest way to use the 99 | debugging tool is to execute the following command from a command shell: 100 101 $ ssltap www.netscape.com 102 103 | The program waits for an incoming connection on the default port 1924. In 104 | your browser window, enter the URL http://intercept:1924. The browser 105 | retrieves the requested page from the server at www.netscape.com, but the 106 | page is intercepted and passed on to the browser by the debugging tool on 107 | intercept. On its way to the browser, the data is printed to the command 108 | shell from which you issued the command. Data sent from the client to the 109 | server is surrounded by the following symbols: --> [ data ] Data sent from 110 | the server to the client is surrounded by the following symbols: "left 111 | arrow"-- [ data ] The raw data stream is sent to standard output and is 112 | not interpreted in any way. This can result in peculiar effects, such as 113 | sounds, flashes, and even crashes of the command shell window. To output a 114 | basic, printable interpretation of the data, use the -h option, or, if you 115 | are looking at an SSL connection, the -s option. You will notice that the 116 | page you retrieved looks incomplete in the browser. This is because, by 117 | default, the tool closes down after the first connection is complete, so 118 | the browser is not able to load images. To make the tool continue to 119 | accept connections, switch on looping mode with the -l option. The 120 | following examples show the output from commonly used combinations of 121 | options. 122 123 Example 1 124 125 $ ssltap.exe -sx -p 444 interzone.mcom.com:443 > sx.txt 126 127 Output 128 129 | Connected to interzone.mcom.com:443 130 | -->; [ 131 | alloclen = 66 bytes 132 | [ssl2] ClientHelloV2 { 133 | version = {0x03, 0x00} 134 | cipher-specs-length = 39 (0x27) 135 | sid-length = 0 (0x00) 136 | challenge-length = 16 (0x10) 137 | cipher-suites = { 138 139 | (0x010080) SSL2/RSA/RC4-128/MD5 140 | (0x020080) SSL2/RSA/RC4-40/MD5 141 | (0x030080) SSL2/RSA/RC2CBC128/MD5 142 | (0x040080) SSL2/RSA/RC2CBC40/MD5 143 | (0x060040) SSL2/RSA/DES64CBC/MD5 144 | (0x0700c0) SSL2/RSA/3DES192EDE-CBC/MD5 145 | (0x000004) SSL3/RSA/RC4-128/MD5 146 | (0x00ffe0) SSL3/RSA-FIPS/3DES192EDE-CBC/SHA 147 | (0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA 148 | (0x00ffe1) SSL3/RSA-FIPS/DES64CBC/SHA 149 | (0x000009) SSL3/RSA/DES64CBC/SHA 150 | (0x000003) SSL3/RSA/RC4-40/MD5 151 | (0x000006) SSL3/RSA/RC2CBC40/MD5 152 | } 153 | session-id = { } 154 | challenge = { 0xec5d 0x8edb 0x37c9 0xb5c9 0x7b70 0x8fe9 0xd1d3 155 156 | 0x2592 } 157 | } 158 | ] 159 | <-- [ 160 | SSLRecord { 161 | 0: 16 03 00 03 e5 \|..... 162 | type = 22 (handshake) 163 | version = { 3,0 } 164 | length = 997 (0x3e5) 165 | handshake { 166 | 0: 02 00 00 46 \|...F 167 | type = 2 (server_hello) 168 | length = 70 (0x000046) 169 | ServerHello { 170 | server_version = {3, 0} 171 | random = {...} 172 | 0: 77 8c 6e 26 6c 0c ec c0 d9 58 4f 47 d3 2d 01 45 \| 173 | wn&l.ì..XOG.-.E 174 | 10: 5c 17 75 43 a7 4c 88 c7 88 64 3c 50 41 48 4f 7f \| 175 176 | \\.uC§L.Ç.d<PAHO. 177 | session ID = { 178 | length = 32 179 180 | contents = {..} 181 | 0: 14 11 07 a8 2a 31 91 29 11 94 40 37 57 10 a7 32 \| ...¨*1.)..@7W.§2 182 | 10: 56 6f 52 62 fe 3d b3 65 b1 e4 13 0f 52 a3 c8 f6 \| VoRbþ=³e±...R£È. 183 | } 184 | cipher_suite = (0x0003) SSL3/RSA/RC4-40/MD5 185 | } 186 | 0: 0b 00 02 c5 \|...Å 187 | type = 11 (certificate) 188 | length = 709 (0x0002c5) 189 | CertificateChain { 190 | chainlength = 706 (0x02c2) 191 | Certificate { 192 | size = 703 (0x02bf) 193 | data = { saved in file 'cert.001' } 194 | } 195 | } 196 | 0: 0c 00 00 ca \|.... 197 | type = 12 (server_key_exchange) 198 | length = 202 (0x0000ca) 199 | 0: 0e 00 00 00 \|.... 200 | type = 14 (server_hello_done) 201 | length = 0 (0x000000) 202 | } 203 | } 204 | ] 205 | --> [ 206 | SSLRecord { 207 | 0: 16 03 00 00 44 \|....D 208 | type = 22 (handshake) 209 | version = { 3,0 } 210 | length = 68 (0x44) 211 | handshake { 212 | 0: 10 00 00 40 \|...@ 213 | type = 16 (client_key_exchange) 214 | length = 64 (0x000040) 215 | ClientKeyExchange { 216 | message = {...} 217 | } 218 | } 219 | } 220 | ] 221 | --> [ 222 | SSLRecord { 223 | 0: 14 03 00 00 01 \|..... 224 | type = 20 (change_cipher_spec) 225 | version = { 3,0 } 226 | length = 1 (0x1) 227 | 0: 01 \|. 228 | } 229 | SSLRecord { 230 | 0: 16 03 00 00 38 \|....8 231 | type = 22 (handshake) 232 | version = { 3,0 } 233 | length = 56 (0x38) 234 | < encrypted > 235 236 | } 237 | ] 238 | <-- [ 239 | SSLRecord { 240 | 0: 14 03 00 00 01 \|..... 241 | type = 20 (change_cipher_spec) 242 | version = { 3,0 } 243 | length = 1 (0x1) 244 | 0: 01 \|. 245 | } 246 | ] 247 | <-- [ 248 | SSLRecord { 249 | 0: 16 03 00 00 38 \|....8 250 | type = 22 (handshake) 251 | version = { 3,0 } 252 | length = 56 (0x38) 253 | < encrypted > 254 255 | } 256 | ] 257 | --> [ 258 | SSLRecord { 259 | 0: 17 03 00 01 1f \|..... 260 | type = 23 (application_data) 261 | version = { 3,0 } 262 | length = 287 (0x11f) 263 | < encrypted > 264 | } 265 | ] 266 | <-- [ 267 | SSLRecord { 268 | 0: 17 03 00 00 a0 \|.... 269 | type = 23 (application_data) 270 | version = { 3,0 } 271 | length = 160 (0xa0) 272 | < encrypted > 273 274 | } 275 | ] 276 | <-- [ 277 | SSLRecord { 278 | 0: 17 03 00 00 df \|....ß 279 | type = 23 (application_data) 280 | version = { 3,0 } 281 | length = 223 (0xdf) 282 | < encrypted > 283 284 | } 285 | SSLRecord { 286 | 0: 15 03 00 00 12 \|..... 287 | type = 21 (alert) 288 | version = { 3,0 } 289 | length = 18 (0x12) 290 | < encrypted > 291 | } 292 | ] 293 | Server socket closed. 294 295 Example 2 296 297 | The -s option turns on SSL parsing. Because the -x option is not used in 298 | this example, undecoded values are output as raw data. The output is 299 | routed to a text file. 300 301 $ ssltap -s -p 444 interzone.mcom.com:443 > s.txt 302 303 Output 304 305 | Connected to interzone.mcom.com:443 306 | --> [ 307 | alloclen = 63 bytes 308 | [ssl2] ClientHelloV2 { 309 | version = {0x03, 0x00} 310 | cipher-specs-length = 36 (0x24) 311 | sid-length = 0 (0x00) 312 | challenge-length = 16 (0x10) 313 | cipher-suites = { 314 | (0x010080) SSL2/RSA/RC4-128/MD5 315 | (0x020080) SSL2/RSA/RC4-40/MD5 316 | (0x030080) SSL2/RSA/RC2CBC128/MD5 317 | (0x060040) SSL2/RSA/DES64CBC/MD5 318 | (0x0700c0) SSL2/RSA/3DES192EDE-CBC/MD5 319 | (0x000004) SSL3/RSA/RC4-128/MD5 320 | (0x00ffe0) SSL3/RSA-FIPS/3DES192EDE-CBC/SHA 321 | (0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA 322 | (0x00ffe1) SSL3/RSA-FIPS/DES64CBC/SHA 323 | (0x000009) SSL3/RSA/DES64CBC/SHA 324 | (0x000003) SSL3/RSA/RC4-40/MD5 325 | } 326 | session-id = { } 327 | challenge = { 0x713c 0x9338 0x30e1 0xf8d6 0xb934 0x7351 0x200c 328 | 0x3fd0 } 329 | ] 330 | >-- [ 331 | SSLRecord { 332 | type = 22 (handshake) 333 | version = { 3,0 } 334 | length = 997 (0x3e5) 335 | handshake { 336 | type = 2 (server_hello) 337 | length = 70 (0x000046) 338 | ServerHello { 339 | server_version = {3, 0} 340 | random = {...} 341 | session ID = { 342 | length = 32 343 | contents = {..} 344 | } 345 | cipher_suite = (0x0003) SSL3/RSA/RC4-40/MD5 346 | } 347 | type = 11 (certificate) 348 | length = 709 (0x0002c5) 349 | CertificateChain { 350 | chainlength = 706 (0x02c2) 351 | Certificate { 352 | size = 703 (0x02bf) 353 | data = { saved in file 'cert.001' } 354 | } 355 | } 356 | type = 12 (server_key_exchange) 357 | length = 202 (0x0000ca) 358 | type = 14 (server_hello_done) 359 | length = 0 (0x000000) 360 | } 361 | } 362 | ] 363 | --> [ 364 | SSLRecord { 365 | type = 22 (handshake) 366 | version = { 3,0 } 367 | length = 68 (0x44) 368 | handshake { 369 | type = 16 (client_key_exchange) 370 | length = 64 (0x000040) 371 | ClientKeyExchange { 372 | message = {...} 373 | } 374 | } 375 | } 376 | ] 377 | --> [ 378 | SSLRecord { 379 | type = 20 (change_cipher_spec) 380 | version = { 3,0 } 381 | length = 1 (0x1) 382 | } 383 | SSLRecord { 384 | type = 22 (handshake) 385 | version = { 3,0 } 386 | length = 56 (0x38) 387 | > encrypted > 388 | } 389 | ] 390 | >-- [ 391 | SSLRecord { 392 | type = 20 (change_cipher_spec) 393 | version = { 3,0 } 394 | length = 1 (0x1) 395 | } 396 | ] 397 | >-- [ 398 | SSLRecord { 399 | type = 22 (handshake) 400 | version = { 3,0 } 401 | length = 56 (0x38) 402 | > encrypted > 403 | } 404 | ] 405 | --> [ 406 | SSLRecord { 407 | type = 23 (application_data) 408 | version = { 3,0 } 409 | length = 287 (0x11f) 410 | > encrypted > 411 | } 412 | ] 413 | [ 414 | SSLRecord { 415 | type = 23 (application_data) 416 | version = { 3,0 } 417 | length = 160 (0xa0) 418 | > encrypted > 419 | } 420 | ] 421 | >-- [ 422 | SSLRecord { 423 | type = 23 (application_data) 424 | version = { 3,0 } 425 | length = 223 (0xdf) 426 | > encrypted > 427 | } 428 | SSLRecord { 429 | type = 21 (alert) 430 | version = { 3,0 } 431 | length = 18 (0x12) 432 | > encrypted > 433 | } 434 | ] 435 | Server socket closed. 436 437 Example 3 438 439 | In this example, the -h option turns hex/ASCII format. There is no SSL 440 | parsing or decoding. The output is routed to a text file. 441 442 $ ssltap -h -p 444 interzone.mcom.com:443 > h.txt 443 444 Output 445 446 | Connected to interzone.mcom.com:443 447 | --> [ 448 | 0: 80 40 01 03 00 00 27 00 00 00 10 01 00 80 02 00 \| .@....'......... 449 | 10: 80 03 00 80 04 00 80 06 00 40 07 00 c0 00 00 04 \| .........@...... 450 | 20: 00 ff e0 00 00 0a 00 ff e1 00 00 09 00 00 03 00 \| ........á....... 451 | 30: 00 06 9b fe 5b 56 96 49 1f 9f ca dd d5 ba b9 52 \| ..þ[V.I.\xd9 ...º¹R 452 | 40: 6f 2d \|o- 453 | ] 454 | <-- [ 455 | 0: 16 03 00 03 e5 02 00 00 46 03 00 7f e5 0d 1b 1d \| ........F....... 456 | 10: 68 7f 3a 79 60 d5 17 3c 1d 9c 96 b3 88 d2 69 3b \| h.:y`..<..³.Òi; 457 | 20: 78 e2 4b 8b a6 52 12 4b 46 e8 c2 20 14 11 89 05 \| x.K.¦R.KFè. ... 458 | 30: 4d 52 91 fd 93 e0 51 48 91 90 08 96 c1 b6 76 77 \| MR.ý..QH.....¶vw 459 | 40: 2a f4 00 08 a1 06 61 a2 64 1f 2e 9b 00 03 00 0b \| \*ô..¡.a¢d...... 460 | 50: 00 02 c5 00 02 c2 00 02 bf 30 82 02 bb 30 82 02 \| ..Å......0...0.. 461 | 60: 24 a0 03 02 01 02 02 02 01 36 30 0d 06 09 2a 86 \| $ .......60...*. 462 | 70: 48 86 f7 0d 01 01 04 05 00 30 77 31 0b 30 09 06 \| H.÷......0w1.0.. 463 | 80: 03 55 04 06 13 02 55 53 31 2c 30 2a 06 03 55 04 \| .U....US1,0*..U. 464 | 90: 0a 13 23 4e 65 74 73 63 61 70 65 20 43 6f 6d 6d \| ..#Netscape Comm 465 | a0: 75 6e 69 63 61 74 69 6f 6e 73 20 43 6f 72 70 6f \| unications Corpo 466 | b0: 72 61 74 69 6f 6e 31 11 30 0f 06 03 55 04 0b 13 \| ration1.0...U... 467 | c0: 08 48 61 72 64 63 6f 72 65 31 27 30 25 06 03 55 \| .Hardcore1'0%..U 468 | d0: 04 03 13 1e 48 61 72 64 63 6f 72 65 20 43 65 72 \| ....Hardcore Cer 469 | e0: 74 69 66 69 63 61 74 65 20 53 65 72 76 65 72 20 \| tificate Server 470 | f0: 49 49 30 1e 17 0d 39 38 30 35 31 36 30 31 30 33 \| II0...9805160103 471 | <additional data lines> 472 | ] 473 | <additional records in same format> 474 | Server socket closed. 475 476 Example 4 477 478 | In this example, the -s option turns on SSL parsing, and the -h option 479 | turns on hex/ASCII format. Both formats are shown for each record. The 480 | output is routed to a text file. 481 482 $ ssltap -hs -p 444 interzone.mcom.com:443 > hs.txt 483 484 Output 485 486 | Connected to interzone.mcom.com:443 487 | --> [ 488 | 0: 80 3d 01 03 00 00 24 00 00 00 10 01 00 80 02 00 \| .=....$......... 489 | 10: 80 03 00 80 04 00 80 06 00 40 07 00 c0 00 00 04 \| .........@...... 490 | 20: 00 ff e0 00 00 0a 00 ff e1 00 00 09 00 00 03 03 \| ........á....... 491 | 30: 55 e6 e4 99 79 c7 d7 2c 86 78 96 5d b5 cf e9 \|U..yÇ\xb0 ,.x.]µÏé 492 | alloclen = 63 bytes 493 | [ssl2] ClientHelloV2 { 494 | version = {0x03, 0x00} 495 | cipher-specs-length = 36 (0x24) 496 | sid-length = 0 (0x00) 497 | challenge-length = 16 (0x10) 498 | cipher-suites = { 499 | (0x010080) SSL2/RSA/RC4-128/MD5 500 | (0x020080) SSL2/RSA/RC4-40/MD5 501 | (0x030080) SSL2/RSA/RC2CBC128/MD5 502 | (0x040080) SSL2/RSA/RC2CBC40/MD5 503 | (0x060040) SSL2/RSA/DES64CBC/MD5 504 | (0x0700c0) SSL2/RSA/3DES192EDE-CBC/MD5 505 | (0x000004) SSL3/RSA/RC4-128/MD5 506 | (0x00ffe0) SSL3/RSA-FIPS/3DES192EDE-CBC/SHA 507 | (0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA 508 | (0x00ffe1) SSL3/RSA-FIPS/DES64CBC/SHA 509 | (0x000009) SSL3/RSA/DES64CBC/SHA 510 | (0x000003) SSL3/RSA/RC4-40/MD5 511 | } 512 | session-id = { } 513 | challenge = { 0x0355 0xe6e4 0x9979 0xc7d7 0x2c86 0x7896 0x5db 514 515 | 0xcfe9 } 516 | } 517 | ] 518 | <additional records in same formats> 519 | Server socket closed. 520 521 Usage Tips 522 523 | When SSL restarts a previous session, it makes use of cached information 524 | to do a partial handshake. If you wish to capture a full SSL handshake, 525 | restart the browser to clear the session id cache. 526 527 | If you run the tool on a machine other than the SSL server to which you 528 | are trying to connect, the browser will complain that the host name you 529 | are trying to connect to is different from the certificate. If you are 530 | using the default BadCert callback, you can still connect through a 531 | dialog. If you are not using the default BadCert callback, the one you 532 | supply must allow for this possibility. 533 534 See Also 535 536 | The NSS Security Tools are also documented at 537 | [1]\ `http://www.mozilla.org/projects/security/pki/nss/ <https://www.mozilla.org/projects/security/pki/nss/>`__. 538 539 Additional Resources 540 541 | NSS is maintained in conjunction with PKI and security-related projects 542 | through Mozilla dn Fedora. The most closely-related project is Dogtag PKI, 543 | with a project wiki at [2]\ http://pki.fedoraproject.org/wiki/. 544 545 | For information specifically about NSS, the NSS project wiki is located at 546 | [3]\ `http://www.mozilla.org/projects/security/pki/nss/ <https://www.mozilla.org/projects/security/pki/nss/>`__. 547 The NSS site relates 548 | directly to NSS code changes and releases. 549 550 Mailing lists: pki-devel@redhat.com and pki-users@redhat.com 551 552 IRC: Freenode at #dogtag-pki 553 554 Authors 555 556 | The NSS tools were written and maintained by developers with Netscape and 557 | now with Red Hat and Sun. 558 559 | Authors: Elio Maldonado <emaldona@redhat.com>, Deon Lackey 560 | <dlackey@redhat.com>. 561 562 Copyright 563 564 (c) 2010, Red Hat, Inc. Licensed under the GNU Public License version 2. 565 566 References 567 568 | Visible links 569 | 1. 570 `http://www.mozilla.org/projects/secu.../pki/nss/tools <https://www.mozilla.org/projects/security/pki/nss/tools>`__ 571 | 2. http://pki.fedoraproject.org/wiki/ 572 | 3. 573 `http://www.mozilla.org/projects/security/pki/nss/ <https://www.mozilla.org/projects/security/pki/nss/>`__