This actually also happens with the latest code from SVN (6.2-SNAPHOT).
Here is debug output from ssltap (http://www.mozilla.org/projects/security/pki/nss/tools/ssltap.html):
1.) Successful handshake:
C:\SKL\Stuff>ssltap -slx -p 4443 localhost:8443
Looking up "localhost"...
Proxy socket ready and listening
Connection #1 [Wed Jan 09 12:24:05 2008]
Connected to localhost:8443
--> [
(142 bytes of 137)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 89 |.....
type = 22 (handshake)
version =
{ 3,1 }
length = 137 (0x89)
handshake {
0: 01 00 00 85 |....
type = 1 (client_hello)
length = 133 (0x000085)
ClientHelloV3 {
client_version = {3, 1}
random = {...}
0: 00 01 6c ad e4 a3 70 11 01 33 86 c3 78 ff 01 f9 | ..l¡õúp..3.├x...
10: a4 c2 73 7f d4 14 9e 46 69 ac 98 ad 62 10 f3 26 | ñ┬s.È.×Fi¼ÿ¡b.¾&
session ID = {
length = 0
contents = {..}
}
cipher_suites
[28] = {
(0xc00a) ????/????????/?????????/???
(0xc014) ????/????????/?????????/???
(0x0039) TLS/DHE-RSA/AES256-CBC/SHA
(0x0038) TLS/DHE-DSS/AES256-CBC/SHA
(0xc00f) ????/????????/?????????/???
(0xc005) ????/????????/?????????/???
(0x0035) TLS/RSA/AES256-CBC/SHA
(0xc007) ????/????????/?????????/???
(0xc009) ????/????????/?????????/???
(0xc011) ????/????????/?????????/???
(0xc013) ????/????????/?????????/???
(0x0033) TLS/DHE-RSA/AES128-CBC/SHA
(0x0032) TLS/DHE-DSS/AES128-CBC/SHA
(0xc00c) ????/????????/?????????/???
(0xc00e) ????/????????/?????????/???
(0xc002) ????/????????/?????????/???
(0xc004) ????/????????/?????????/???
(0x0004) SSL3/RSA/RC4-128/MD5
(0x0005) SSL3/RSA/RC4-128/SHA
(0x002f) TLS/RSA/AES128-CBC/SHA
(0xc008) ????/????????/?????????/???
(0xc012) ????/????????/?????????/???
(0x0016) SSL3/DHE-RSA/3DES192EDE-CBC/SHA
(0x0013) SSL3/DHE-DSS/DES192EDE3CBC/SHA
(0xc00d) ????/????????/?????????/???
(0xc003) ????/????????/?????????/???
(0xfeff) SSL3/RSA-FIPS/3DESEDE-CBC/SHA
(0x000a) SSL3/RSA/3DES192EDE-CBC/SHA
}
}
}
}
]
<-- [
(1160 bytes of 1155)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 16 03 01 04 83 |....â
type = 22 (handshake)
version = { 3,1 }
length = 1155 (0x483)
handshake {
0: 02 00 00 46 |...F
type = 2 (server_hello)
length = 70 (0x000046)
ServerHello {
server_version =
{3, 1}
random =
{...}
0: 47 84 ae d5 a3 f9 5c f0 52 69 98 89 9e 2d 2c e6 | Gä«ıú.\Riÿ.×-,.
10: 67 0d c8 f0 e4 a9 4b 08 2d d5 39 59 3c 9e dd d3 | g.╚õ.K.-ı9Y<×.Ë
session ID = {
length = 32
contents = {..}
0: 47 84 ae d5 c3 99 8d b3 77 f6 da bc 6f 44 4a 4d | Gä«ı├Öì│w..╝oDJM
10: d2 d1 69 f8 e8 3f 0c ef f5 e0 18 ef e7 95 b4 69 | ÊÐi°Þ?.´.Ó.´þò┤i
}
cipher_suite = (0x0032) TLS/DHE-DSS/AES128-CBC/SHA
}
0: 0b 00 02 f6 |....
type = 11 (certificate)
length = 758 (0x0002f6)
CertificateChain {
chainlength = 755 (0x02f3)
Certificate {
size = 752 (0x02f0)
data = { saved in file 'cert.001' }
}
}
0: 0c 00 01 37 |...7
type = 12 (server_key_exchange)
length = 311 (0x000137)
0: 0e 00 00 00 |....
type = 14 (server_hello_done)
length = 0 (0x000000)
}
}
]
--> [
(198 bytes of 134, with 59 left over)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 86 |.....
type = 22 (handshake)
version = { 3,1 }
length = 134 (0x86)
handshake {
0: 10 00 00 82 |....
type = 16 (client_key_exchange)
length = 130 (0x000082)
ClientKeyExchange {
message = {...}
}
}
}
(198 bytes of 1, with 53 left over)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 14 03 01 00 01 |.....
type = 20 (change_cipher_spec)
version =
{ 3,1 }
length = 1 (0x1)
0: 01 |.
}
(198 bytes of 48)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 30 |....0
type = 22 (handshake)
version = { 3,1 }
length = 48 (0x30)
< encrypted >
}
]
<-- [
(6 bytes of 1)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 14 03 01 00 01 |.....
type = 20 (change_cipher_spec)
version =
{ 3,1 }
length = 1 (0x1)
0: 01 |.
}
]
<-- [
(53 bytes of 48)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 30 |....0
type = 22 (handshake)
version = { 3,1 }
length = 48 (0x30)
< encrypted >
}
]
--> [
(485 bytes of 480)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 01 e0 |....Ó
type = 23 (application_data)
version =
{ 3,1 }
length = 480 (0x1e0)
< encrypted >
}
]
<-- [
(165 bytes of 160)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 17 03 01 00 a0 |....á
type = 23 (application_data)
version = { 3,1 }
length = 160 (0xa0)
< encrypted >
}
]
<-- [
(261 bytes of 256)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 01 00 |.....
type = 23 (application_data)
version =
{ 3,1 }
length = 256 (0x100)
< encrypted >
}
]
--> [
(421 bytes of 416)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 17 03 01 01 a0 |....á
type = 23 (application_data)
version = { 3,1 }
length = 416 (0x1a0)
< encrypted >
}
]
<-- [
(149 bytes of 144)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 00 90 |....É
type = 23 (application_data)
version =
{ 3,1 }
length = 144 (0x90)
< encrypted >
}
]
<-- [
(1429 bytes of 1424)
SSLRecord {
[Wed Jan 09 12:24:05 2008]
0: 17 03 01 05 90 |....É
type = 23 (application_data)
version = { 3,1 }
length = 1424 (0x590)
< encrypted >
}
]
<-- [
(37 bytes of 32)
SSLRecord { [Wed Jan 09 12:24:36 2008]
0: 15 03 01 00 20 |....
type = 21 (alert)
version =
{ 3,1 }
length = 32 (0x20)
< encrypted >
}
]
Read EOF on Server socket. [Wed Jan 09 12:24:36 2008]
Read EOF on Client socket. [Wed Jan 09 12:24:44 2008]
Connection 1 Complete [Wed Jan 09 12:24:44 2008]
2.) Handshake error:
C:\SKL\Stuff>ssltap -slx -p 6443 localhost:8443
Looking up "localhost"...
Proxy socket ready and listening
Connection #1 [Wed Jan 09 12:18:41 2008]
Connected to localhost:8443
--> [
alloclen = 63 bytes
(63 bytes of 63)
[Wed Jan 09 12:18:41 2008] [ssl2] ClientHelloV2 {
version =
{0x03, 0x00}
cipher-specs-length = 36 (0x24)
sid-length = 0 (0x00)
challenge-length = 16 (0x10)
cipher-suites =
{
(0x000039) TLS/DHE-RSA/AES256-CBC/SHA
(0x000038) TLS/DHE-DSS/AES256-CBC/SHA
(0x000035) TLS/RSA/AES256-CBC/SHA
(0x000033) TLS/DHE-RSA/AES128-CBC/SHA
(0x000032) TLS/DHE-DSS/AES128-CBC/SHA
(0x000004) SSL3/RSA/RC4-128/MD5
(0x000005) SSL3/RSA/RC4-128/SHA
(0x00002f) TLS/RSA/AES128-CBC/SHA
(0x000016) SSL3/DHE-RSA/3DES192EDE-CBC/SHA
(0x000013) SSL3/DHE-DSS/DES192EDE3CBC/SHA
(0x00feff) SSL3/RSA-FIPS/3DESEDE-CBC/SHA
(0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA
}
session-id = { }
challenge =
{ 0xa954 0x2122 0x3e82 0xb993 0xd72f 0xea54 0x779f 0x958c }
}
]
<-- [
(1161 bytes of 1156)
SSLRecord { [Wed Jan 09 12:18:41 2008]
0: 16 03 00 04 84 |....ä
type = 22 (handshake)
version =
{ 3,0 }
length = 1156 (0x484)
handshake {
0: 02 00 00 46 |...F
type = 2 (server_hello)
length = 70 (0x000046)
ServerHello {
server_version = {3, 0}
random = {...}
0: 47 84 ad 91 a1 f6 cb e5 f8 e2 f0 46 60 4b dd 48 | G䡿í.╦.°.F`K.H
10: 13 a8 93 96 d2 4f 2b d8 2d fe 49 2f 22 e5 29 5e | .¿ôûÊO+Ï-.I/".)^
session ID = {
length = 32
contents = {..}
0: 47 84 ad 91 84 b7 ef 62 92 fb 03 d7 8a 41 ae 82 | G䡿äÀ´bƹ.Î.A«.
10: d5 57 a3 e0 24 cc b5 2e b2 c7 29 3d 3a 37 a6 11 | ıWúÓ$╠Á.▓Ã)=:7ª.
}
cipher_suite = (0x0032) TLS/DHE-DSS/AES128-CBC/SHA
}
0: 0b 00 02 f6 |....
type = 11 (certificate)
length = 758 (0x0002f6)
CertificateChain {
chainlength = 755 (0x02f3)
Certificate {
size = 752 (0x02f0)
data = { saved in file 'cert.001' }
}
}
0: 0c 00 01 38 |...8
type = 12 (server_key_exchange)
length = 312 (0x000138)
0: 0e 00 00 00 |....
type = 14 (server_hello_done)
length = 0 (0x000000)
}
}
]
--> [
(7 bytes of 2)
SSLRecord {
[Wed Jan 09 12:18:41 2008]
0: 15 03 00 00 02 |.....
type = 21 (alert)
version = { 3,0 }
length = 2 (0x2)
fatal: handshake failure
0: 02 28 |.(
}
]
Read EOF on Server socket. [Wed Jan 09 12:18:41 2008]
Read EOF on Client socket. [Wed Jan 09 12:18:48 2008]
Connection 1 Complete [Wed Jan 09 12:18:48 2008]
This actually also happens with the latest code from SVN (6.2-SNAPHOT).
Here is debug output from ssltap (http://www.mozilla.org/projects/security/pki/nss/tools/ssltap.html):
1.) Successful handshake:
{ 3,1 }C:\SKL\Stuff>ssltap -slx -p 4443 localhost:8443
Looking up "localhost"...
Proxy socket ready and listening
Connection #1 [Wed Jan 09 12:24:05 2008]
Connected to localhost:8443
--> [
(142 bytes of 137)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 89 |.....
type = 22 (handshake)
version =
length = 137 (0x89)
handshake {
0: 01 00 00 85 |....
type = 1 (client_hello)
length = 133 (0x000085)
ClientHelloV3 {
client_version = {3, 1}
random = {...}
0: 00 01 6c ad e4 a3 70 11 01 33 86 c3 78 ff 01 f9 | ..l¡õúp..3.├x...
10: a4 c2 73 7f d4 14 9e 46 69 ac 98 ad 62 10 f3 26 | ñ┬s.È.×Fi¼ÿ¡b.¾&
session ID = {
length = 0
contents = {..}
}
cipher_suites[28] = { (0xc00a) ????/????????/?????????/??? (0xc014) ????/????????/?????????/??? (0x0039) TLS/DHE-RSA/AES256-CBC/SHA (0x0038) TLS/DHE-DSS/AES256-CBC/SHA (0xc00f) ????/????????/?????????/??? (0xc005) ????/????????/?????????/??? (0x0035) TLS/RSA/AES256-CBC/SHA (0xc007) ????/????????/?????????/??? (0xc009) ????/????????/?????????/??? (0xc011) ????/????????/?????????/??? (0xc013) ????/????????/?????????/??? (0x0033) TLS/DHE-RSA/AES128-CBC/SHA (0x0032) TLS/DHE-DSS/AES128-CBC/SHA (0xc00c) ????/????????/?????????/??? (0xc00e) ????/????????/?????????/??? (0xc002) ????/????????/?????????/??? (0xc004) ????/????????/?????????/??? (0x0004) SSL3/RSA/RC4-128/MD5 (0x0005) SSL3/RSA/RC4-128/SHA (0x002f) TLS/RSA/AES128-CBC/SHA (0xc008) ????/????????/?????????/??? (0xc012) ????/????????/?????????/??? (0x0016) SSL3/DHE-RSA/3DES192EDE-CBC/SHA (0x0013) SSL3/DHE-DSS/DES192EDE3CBC/SHA (0xc00d) ????/????????/?????????/??? (0xc003) ????/????????/?????????/??? (0xfeff) SSL3/RSA-FIPS/3DESEDE-CBC/SHA (0x000a) SSL3/RSA/3DES192EDE-CBC/SHA }
}
}
}
]
<-- [
(1160 bytes of 1155)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 16 03 01 04 83 |....â
type = 22 (handshake)
version = { 3,1 }
length = 1155 (0x483)
{3, 1}handshake {
0: 02 00 00 46 |...F
type = 2 (server_hello)
length = 70 (0x000046)
ServerHello {
server_version =
random =
{...}0: 47 84 ae d5 a3 f9 5c f0 52 69 98 89 9e 2d 2c e6 | Gä«ıú.\Riÿ.×-,.
10: 67 0d c8 f0 e4 a9 4b 08 2d d5 39 59 3c 9e dd d3 | g.╚õ.K.-ı9Y<×.Ë
session ID = {
length = 32
contents = {..}
0: 47 84 ae d5 c3 99 8d b3 77 f6 da bc 6f 44 4a 4d | Gä«ı├Öì│w..╝oDJM
10: d2 d1 69 f8 e8 3f 0c ef f5 e0 18 ef e7 95 b4 69 | ÊÐi°Þ?.´.Ó.´þò┤i
}
cipher_suite = (0x0032) TLS/DHE-DSS/AES128-CBC/SHA
}
0: 0b 00 02 f6 |....
type = 11 (certificate)
length = 758 (0x0002f6)
CertificateChain {
chainlength = 755 (0x02f3)
Certificate {
size = 752 (0x02f0)
data = { saved in file 'cert.001' }
}
}
0: 0c 00 01 37 |...7
type = 12 (server_key_exchange)
length = 311 (0x000137)
0: 0e 00 00 00 |....
type = 14 (server_hello_done)
length = 0 (0x000000)
}
}
]
--> [
(198 bytes of 134, with 59 left over)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 86 |.....
type = 22 (handshake)
version = { 3,1 }
length = 134 (0x86)
handshake {
0: 10 00 00 82 |....
type = 16 (client_key_exchange)
length = 130 (0x000082)
ClientKeyExchange {
message = {...}
}
{ 3,1 }}
}
(198 bytes of 1, with 53 left over)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 14 03 01 00 01 |.....
type = 20 (change_cipher_spec)
version =
length = 1 (0x1)
0: 01 |.
}
(198 bytes of 48)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 30 |....0
type = 22 (handshake)
version = { 3,1 }
length = 48 (0x30)
{ 3,1 }< encrypted >
}
]
<-- [
(6 bytes of 1)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 14 03 01 00 01 |.....
type = 20 (change_cipher_spec)
version =
length = 1 (0x1)
0: 01 |.
}
]
<-- [
(53 bytes of 48)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 16 03 01 00 30 |....0
type = 22 (handshake)
version = { 3,1 }
length = 48 (0x30)
{ 3,1 }< encrypted >
}
]
--> [
(485 bytes of 480)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 01 e0 |....Ó
type = 23 (application_data)
version =
length = 480 (0x1e0)
< encrypted >
}
]
<-- [
(165 bytes of 160)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 00 a0 |....á
type = 23 (application_data)
version = { 3,1 }
length = 160 (0xa0)
{ 3,1 }< encrypted >
}
]
<-- [
(261 bytes of 256)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 01 00 |.....
type = 23 (application_data)
version =
length = 256 (0x100)
< encrypted >
}
]
--> [
(421 bytes of 416)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 01 a0 |....á
type = 23 (application_data)
version = { 3,1 }
length = 416 (0x1a0)
{ 3,1 }< encrypted >
}
]
<-- [
(149 bytes of 144)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 00 90 |....É
type = 23 (application_data)
version =
length = 144 (0x90)
< encrypted >
}
]
<-- [
(1429 bytes of 1424)
SSLRecord { [Wed Jan 09 12:24:05 2008]
0: 17 03 01 05 90 |....É
type = 23 (application_data)
version = { 3,1 }
length = 1424 (0x590)
{ 3,1 }< encrypted >
}
]
<-- [
(37 bytes of 32)
SSLRecord { [Wed Jan 09 12:24:36 2008]
0: 15 03 01 00 20 |....
type = 21 (alert)
version =
length = 32 (0x20)
< encrypted >
}
]
Read EOF on Server socket. [Wed Jan 09 12:24:36 2008]
Read EOF on Client socket. [Wed Jan 09 12:24:44 2008]
Connection 1 Complete [Wed Jan 09 12:24:44 2008]
2.) Handshake error:
{0x03, 0x00}C:\SKL\Stuff>ssltap -slx -p 6443 localhost:8443
Looking up "localhost"...
Proxy socket ready and listening
Connection #1 [Wed Jan 09 12:18:41 2008]
Connected to localhost:8443
--> [
alloclen = 63 bytes
(63 bytes of 63)
[Wed Jan 09 12:18:41 2008] [ssl2] ClientHelloV2 {
version =
cipher-specs-length = 36 (0x24)
{ (0x000039) TLS/DHE-RSA/AES256-CBC/SHA (0x000038) TLS/DHE-DSS/AES256-CBC/SHA (0x000035) TLS/RSA/AES256-CBC/SHA (0x000033) TLS/DHE-RSA/AES128-CBC/SHA (0x000032) TLS/DHE-DSS/AES128-CBC/SHA (0x000004) SSL3/RSA/RC4-128/MD5 (0x000005) SSL3/RSA/RC4-128/SHA (0x00002f) TLS/RSA/AES128-CBC/SHA (0x000016) SSL3/DHE-RSA/3DES192EDE-CBC/SHA (0x000013) SSL3/DHE-DSS/DES192EDE3CBC/SHA (0x00feff) SSL3/RSA-FIPS/3DESEDE-CBC/SHA (0x00000a) SSL3/RSA/3DES192EDE-CBC/SHA }sid-length = 0 (0x00)
challenge-length = 16 (0x10)
cipher-suites =
session-id = { }
{ 0xa954 0x2122 0x3e82 0xb993 0xd72f 0xea54 0x779f 0x958c }challenge =
}
{ 3,0 }]
<-- [
(1161 bytes of 1156)
SSLRecord { [Wed Jan 09 12:18:41 2008]
0: 16 03 00 04 84 |....ä
type = 22 (handshake)
version =
length = 1156 (0x484)
handshake {
0: 02 00 00 46 |...F
type = 2 (server_hello)
length = 70 (0x000046)
ServerHello {
server_version = {3, 0}
random = {...}
0: 47 84 ad 91 a1 f6 cb e5 f8 e2 f0 46 60 4b dd 48 | G䡿í.╦.°.F`K.H
10: 13 a8 93 96 d2 4f 2b d8 2d fe 49 2f 22 e5 29 5e | .¿ôûÊO+Ï-.I/".)^
session ID = {
length = 32
contents = {..}
0: 47 84 ad 91 84 b7 ef 62 92 fb 03 d7 8a 41 ae 82 | G䡿äÀ´bƹ.Î.A«.
10: d5 57 a3 e0 24 cc b5 2e b2 c7 29 3d 3a 37 a6 11 | ıWúÓ$╠Á.▓Ã)=:7ª.
}
cipher_suite = (0x0032) TLS/DHE-DSS/AES128-CBC/SHA
}
0: 0b 00 02 f6 |....
type = 11 (certificate)
length = 758 (0x0002f6)
CertificateChain {
chainlength = 755 (0x02f3)
Certificate {
size = 752 (0x02f0)
data = { saved in file 'cert.001' }
}
}
0: 0c 00 01 38 |...8
type = 12 (server_key_exchange)
length = 312 (0x000138)
0: 0e 00 00 00 |....
type = 14 (server_hello_done)
length = 0 (0x000000)
}
}
]
--> [
(7 bytes of 2)
SSLRecord { [Wed Jan 09 12:18:41 2008]
0: 15 03 00 00 02 |.....
type = 21 (alert)
version = { 3,0 }
length = 2 (0x2)
fatal: handshake failure
0: 02 28 |.(
}
]
Read EOF on Server socket. [Wed Jan 09 12:18:41 2008]
Read EOF on Client socket. [Wed Jan 09 12:18:48 2008]
Connection 1 Complete [Wed Jan 09 12:18:48 2008]