Hi Gerald,
The problem was with CertificateRequest message – it was made with
incorrect length of certificate_authorities vector. Please, try
attached patch. Before applying the patch please revert all previously
patched files to their initial state:
%Harmony_WS_Root%> svn revert
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse
Thank you for your assistance,
Alexander Kleymenov
On 10/24/06, Gerald Jerome <[EMAIL PROTECTED]> wrote:
Hello Alexander,
Unfortunately, I'm still getting the decode_error after making the changes
referenced in patch3.txt. I've attached a .tar file to this reply so you
can verify I made the appropriate changes (.zip files will not go through
our email server). Below is the debug output I receive:
socket[main] SSLSocketImpl: CLIENT
socket[main] SSLSocketImpl.startHandshake
socket[main] SSLSocketImpl: HS status: NEED_WRAP NEED_WRAP
record[main] SSLRecordProtocol.wrap: TLSPlaintext.fragment[67]:
01 00 00 3F 03 01 16 16 16 16 C9 61 E8 E5 AF C5
5C 6E 8A C9 68 77 9D 47 46 66 CA 8C D2 4B FD 75
F3 96 78 AA FE 3E 00 00 18 00 04 00 05 00 0A 00
16 00 13 00 09 00 15 00 12 00 03 00 08 00 14 00
11 01 00
socket[main] SSLSocketImpl: HS status: NEED_UNWRAP NEED_UNWRAP
record[main] SSLRecordProtocol.unwrap: BEGIN [
record[main] Got the message of type: 22
record[main] TLSCiphertext.fragment[74]: ...
02 00 00 46 03 01 45 3D 15 1B CF 40 57 BF 9C 29
6A 8C 19 DA A2 12 2B 26 B1 91 27 EB 82 85 FE FE
CF E1 DD 04 27 F7 20 ED 32 80 1B BA 25 B3 64 24
0E 7C C0 9E 34 AC 0D 8F 41 78 0D 04 FE 96 D6 1D
2F 03 67 C6 44 B5 AF 00 04 00
record[main] SSLRecordProtocol:unwrap ] END, type: 22
socket[main] SSLSocketImpl: HS status: NEED_UNWRAP NEED_UNWRAP
record[main] SSLRecordProtocol.unwrap: BEGIN [
record[main] Got the message of type: 22
record[main] TLSCiphertext.fragment[2235]: ...
0B 00 08 B7 00 08 B4 00 05 7B 30 82 05 77 30 82
05 21 A0 03 02 01 02 02 0A 27 34 7A FD 00 01 00
00 09 FA 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05
05 00 30 81 99 31 20 30 1E 06 09 2A 86 48 86 F7
0D 01 09 01 16 11 63 65 72 74 2D 72 65 71 40 77
63 6F 6D 2E 63 6F 6D 31 0B 30 09 06 03 55 04 06
13 02 55 53 31 0B 30 09 06 03 55 04 08 13 02 43
4F 31 19 30 17 06 03 55 04 07 13 10 43 6F 6C 6F
72 61 64 6F 20 53 70 72 69 6E 67 73 31 0C 30 0A
06 03 55 04 0A 13 03 4D 43 49 31 0C 30 0A 06 03
55 04 0B 13 03 4E 41 53 31 24 30 22 06 03 55 04
03 13 1B 4D 43 49 20 54 65 73 74 20 61 6E 64 20
44 65 76 65 6C 6F 70 6D 65 6E 74 20 43 41 30 1E
17 0D 30 36 30 34 32 31 31 36 33 35 32 32 5A 17
0D 31 31 30 34 32 31 31 36 34 35 32 32 5A 30 81
84 31 23 30 21 06 09 2A 86 48 86 F7 0D 01 09 01
16 14 6D 61 63 69 65 6A 2E 6E 6F 77 61 6B 40 6D
63 69 2E 63 6F 6D 31 0B 30 09 06 03 55 04 06 13
02 55 53 31 0B 30 09 06 03 55 04 08 13 02 4E 59
31 12 30 10 06 03 55 04 07 13 09 52 79 65 20 42
72 6F 6F 6B 31 0C 30 0A 06 03 55 04 0A 13 03 4D
43 49 31 0B 30 09 06 03 55 04 0B 13 02 49 54 31
14 30 12 06 03 55 04 03 13 0B 53 61 66 65 20 53
65 72 76 65 72 30 82 01 22 30 0D 06 09 2A 86 48
86 F7 0D 01 01 01 05 00 03 82 01 0F 00 30 82 01
0A 02 82 01 01 00 D0 99 17 A4 C3 84 6D 81 B3 6C
9B A3 82 F4 26 6D 84 6E 1C 4E ED 5D BD A8 D2 42
23 5F C6 54 38 13 09 DF 85 4D BF C3 58 7F 50 B3
80 D2 D5 03 6E 3E 68 9F DC 48 A6 09 D1 12 83 F5
CF FE 7D 0F 11 9D CF 1A 87 99 A5 64 1B AB 24 F1
98 1A 81 84 49 38 1A 0F D6 C8 20 5D 24 5F 02 6F
49 72 B5 FA 8C 56 46 0B 25 F9 10 DB 0C 20 77 60
38 1D 18 2E 4C 50 BD 7C A8 64 F5 6E 39 5E 44 62
7B D5 A7 93 04 3C 71 3C F7 9D B7 B9 42 86 1E 4D
10 51 C3 26 95 15 2C A1 9D 3D A3 D8 38 31 32 70
5E F9 B1 8B 30 6A 0E AB 10 7E EA 7C E7 FA 7A 46
45 81 51 14 28 95 30 51 70 B9 7E C6 87 18 5F D4
B3 B4 25 1C 73 64 9C 60 AC AB DF F3 6E 54 11 47
8C 96 6E 88 19 8C 25 B5 74 66 DB 4C FD F0 33 13
C4 DF 6B 4F 30 1F 94 E6 45 81 12 CD 33 64 69 A1
7A 20 73 E9 0B 88 FA 1D EF 35 FF 73 6E CC 25 CF
B1 C0 D2 24 80 97 02 03 01 00 01 A3 82 02 94 30
82 02 90 30 1A 06 03 55 1D 11 04 13 30 11 82 09
6F 6D 7A 73 72 76 30 39 30 87 04 A6 25 D6 1E 30
1D 06 03 55 1D 0E 04 16 04 14 73 F7 B1 30 41 13
95 DD F2 46 F3 AC B5 C6 45 8C 01 AE 30 F7 30 81
D5 06 03 55 1D 23 04 81 CD 30 81 CA 80 14 5E 23
81 53 9C 80 7B B7 E8 26 A3 72 5C 34 98 FC C0 CB
24 A3 A1 81 9F A4 81 9C 30 81 99 31 20 30 1E 06
09 2A 86 48 86 F7 0D 01 09 01 16 11 63 65 72 74
2D 72 65 71 40 77 63 6F 6D 2E 63 6F 6D 31 0B 30
09 06 03 55 04 06 13 02 55 53 31 0B 30 09 06 03
55 04 08 13 02 43 4F 31 19 30 17 06 03 55 04 07
13 10 43 6F 6C 6F 72 61 64 6F 20 53 70 72 69 6E
67 73 31 0C 30 0A 06 03 55 04 0A 13 03 4D 43 49
31 0C 30 0A 06 03 55 04 0B 13 03 4E 41 53 31 24
30 22 06 03 55 04 03 13 1B 4D 43 49 20 54 65 73
74 20 61 6E 64 20 44 65 76 65 6C 6F 70 6D 65 6E
74 20 43 41 82 10 2F 06 C1 83 30 75 AF A6 43 FB
5C 2A A4 FF D5 97 30 81 A5 06 03 55 1D 1F 04 81
9D 30 81 9A 30 4A A0 48 A0 46 86 44 68 74 74 70
3A 2F 2F 6E 64 63 6E 61 73 77 65 62 31 2F 43 65
72 74 45 6E 72 6F 6C 6C 2F 4D 43 49 25 32 30 54
65 73 74 25 32 30 61 6E 64 25 32 30 44 65 76 65
6C 6F 70 6D 65 6E 74 25 32 30 43 41 2E 63 72 6C
30 4C A0 4A A0 48 86 46 66 69 6C 65 3A 2F 2F 5C
5C 6E 64 63 6E 61 73 77 65 62 31 5C 43 65 72 74
45 6E 72 6F 6C 6C 5C 4D 43 49 25 32 30 54 65 73
74 25 32 30 61 6E 64 25 32 30 44 65 76 65 6C 6F
70 6D 65 6E 74 25 32 30 43 41 2E 63 72 6C 30 81
D2 06 08 2B 06 01 05 05 07 01 01 04 81 C5 30 81
C2 30 5E 06 08 2B 06 01 05 05 07 30 02 86 52 68
74 74 70 3A 2F 2F 6E 64 63 6E 61 73 77 65 62 31
2F 43 65 72 74 45 6E 72 6F 6C 6C 2F 6E 64 63 6E
61 73 77 65 62 31 5F 4D 43 49 25 32 30 54 65 73
74 25 32 30 61 6E 64 25 32 30 44 65 76 65 6C 6F
70 6D 65 6E 74 25 32 30 43 41 28 31 29 2E 63 72
74 30 60 06 08 2B 06 01 05 05 07 30 02 86 54 66
69 6C 65 3A 2F 2F 5C 5C 6E 64 63 6E 61 73 77 65
62 31 5C 43 65 72 74 45 6E 72 6F 6C 6C 5C 6E 64
63 6E 61 73 77 65 62 31 5F 4D 43 49 25 32 30 54
65 73 74 25 32 30 61 6E 64 25 32 30 44 65 76 65
6C 6F 70 6D 65 6E 74 25 32 30 43 41 28 31 29 2E
63 72 74 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05
05 00 03 41 00 4B B1 87 EB 38 FF 03 C4 DE 8E D3
AA FA 8C D3 68 26 C8 C0 01 94 F1 E1 3D ED F8 48
D9 E5 D5 23 B7 C5 DF 58 DA 87 28 0A C2 85 37 A5
45 84 58 93 34 3C A1 5F 40 D7 27 15 50 78 36 7C
C3 EB C2 29 C3 00 03 33 30 82 03 2F 30 82 02 D9
A0 03 02 01 02 02 10 2F 06 C1 83 30 75 AF A6 43
FB 5C 2A A4 FF D5 97 30 0D 06 09 2A 86 48 86 F7
0D 01 01 05 05 00 30 81 99 31 20 30 1E 06 09 2A
86 48 86 F7 0D 01 09 01 16 11 63 65 72 74 2D 72
65 71 40 77 63 6F 6D 2E 63 6F 6D 31 0B 30 09 06
03 55 04 06 13 02 55 53 31 0B 30 09 06 03 55 04
08 13 02 43 4F 31 19 30 17 06 03 55 04 07 13 10
43 6F 6C 6F 72 61 64 6F 20 53 70 72 69 6E 67 73
31 0C 30 0A 06 03 55 04 0A 13 03 4D 43 49 31 0C
30 0A 06 03 55 04 0B 13 03 4E 41 53 31 24 30 22
06 03 55 04 03 13 1B 4D 43 49 20 54 65 73 74 20
61 6E 64 20 44 65 76 65 6C 6F 70 6D 65 6E 74 20
43 41 30 1E 17 0D 30 33 30 34 31 35 31 38 35 32
35 32 5A 17 0D 32 36 30 34 31 34 31 38 35 30 32
38 5A 30 81 99 31 20 30 1E 06 09 2A 86 48 86 F7
0D 01 09 01 16 11 63 65 72 74 2D 72 65 71 40 77
63 6F 6D 2E 63 6F 6D 31 0B 30 09 06 03 55 04 06
13 02 55 53 31 0B 30 09 06 03 55 04 08 13 02 43
4F 31 19 30 17 06 03 55 04 07 13 10 43 6F 6C 6F
72 61 64 6F 20 53 70 72 69 6E 67 73 31 0C 30 0A
06 03 55 04 0A 13 03 4D 43 49 31 0C 30 0A 06 03
55 04 0B 13 03 4E 41 53 31 24 30 22 06 03 55 04
03 13 1B 4D 43 49 20 54 65 73 74 20 61 6E 64 20
44 65 76 65 6C 6F 70 6D 65 6E 74 20 43 41 30 5C
30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03
4B 00 30 48 02 41 00 C8 D5 A1 0E 0B 4A DB CE FB
19 07 DB 7C 26 8B F6 8A 47 41 4C 81 83 83 FE EC
E0 F7 1F 3B 86 AE E8 7A E9 A9 7B 0D 0F 4C F2 DE
D1 10 13 83 9E 12 CD C4 8A BC 7E BB FF B1 19 6D
9F 87 71 D2 57 A0 53 02 03 01 00 01 A3 81 FA 30
81 F7 30 0B 06 03 55 1D 0F 04 04 03 02 01 C6 30
0F 06 03 55 1D 13 01 01 FF 04 05 30 03 01 01 FF
30 1D 06 03 55 1D 0E 04 16 04 14 5E 23 81 53 9C
80 7B B7 E8 26 A3 72 5C 34 98 FC C0 CB 24 A3 30
81 A5 06 03 55 1D 1F 04 81 9D 30 81 9A 30 4A A0
48 A0 46 86 44 68 74 74 70 3A 2F 2F 6E 64 63 6E
61 73 77 65 62 31 2F 43 65 72 74 45 6E 72 6F 6C
6C 2F 4D 43 49 25 32 30 54 65 73 74 25 32 30 61
6E 64 25 32 30 44 65 76 65 6C 6F 70 6D 65 6E 74
25 32 30 43 41 2E 63 72 6C 30 4C A0 4A A0 48 86
46 66 69 6C 65 3A 2F 2F 5C 5C 6E 64 63 6E 61 73
77 65 62 31 5C 43 65 72 74 45 6E 72 6F 6C 6C 5C
4D 43 49 25 32 30 54 65 73 74 25 32 30 61 6E 64
25 32 30 44 65 76 65 6C 6F 70 6D 65 6E 74 25 32
30 43 41 2E 63 72 6C 30 10 06 09 2B 06 01 04 01
82 37 15 01 04 03 02 01 01 30 0D 06 09 2A 86 48
86 F7 0D 01 01 05 05 00 03 41 00 3C AB 4F 15 45
29 EA B4 98 D9 28 25 EB E3 D5 0B AA EB B3 31 9C
75 95 6F 57 DC 1B 7C 6B CE 14 FE 73 95 FF 1D AA
07 15 22 CA 5A CA CC F6 8D 29 30 8C 2F 33 EE 22
7F C6 C5 FF 60 69 31 9C A3 1F 7D
record[main] SSLRecordProtocol:unwrap ] END, type: 22
socket[main] SSLSocketImpl: HS status: NEED_UNWRAP NEED_UNWRAP
record[main] SSLRecordProtocol.unwrap: BEGIN [
record[main] Got the message of type: 22
record[main] TLSCiphertext.fragment[13]: ...
0D 00 00 05 02 01 02 00 00 0E 00 00 00
prf[main] secret[48]:
03 01 98 D7 96 1D 63 7D E2 50 EF 4C 72 9C C6 C2
07 F7 8D E3 AA 34 9B 79 B5 BF 57 F8 71 73 2D C7
DE 88 49 08 4A A7 DB A2 9D B6 18 9E 87 BA C2 DC
prf[main] label[13]:
6D 61 73 74 65 72 20 73 65 63 72 65 74
prf[main] seed[64]:
16 16 16 16 C9 61 E8 E5 AF C5 5C 6E 8A C9 68 77
9D 47 46 66 CA 8C D2 4B FD 75 F3 96 78 AA FE 3E
45 3D 15 1B CF 40 57 BF 9C 29 6A 8C 19 DA A2 12
2B 26 B1 91 27 EB 82 85 FE FE CF E1 DD 04 27 F7
prf[main] MD5 key:
03 01 98 D7 96 1D 63 7D E2 50 EF 4C 72 9C C6 C2
07 F7 8D E3 AA 34 9B 79
prf[main] SHA1 key:
B5 BF 57 F8 71 73 2D C7 DE 88 49 08 4A A7 DB A2
9D B6 18 9E 87 BA C2 DC
prf[main] P_MD5:
8B 20 97 6F 9E 45 5B 74 EC BE EC 35 FC 9C 6F 3D
42 44 9F 74 03 C3 49 30 BC 0B F4 FB 29 04 58 25
C4 D8 D4 16 FB 75 51 57 02 C2 20 BF 92 BE EA 33
prf[main] PRF:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44 A0 BC 88 AE
9B 1E A0 EE C2 55 BA AF 01 C9 1D 3B AC 79 C1 64 FD 9A ED 1F
AF 21 F9 97 40 74 E6 31
record[main] SSLRecordProtocol:unwrap ] END, type: 22
socket[main] SSLSocketImpl: HS status: NEED_WRAP NEED_WRAP
record[main] SSLRecordProtocol.wrap: TLSPlaintext.fragment[2773]:
0B 00 08 C7 00 08 C4 00 05 8B 30 82 05 87 30 82
05 31 A0 03 02 01 02 02 0A 09 18 7D 2C 00 01 00
00 0A 93 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05
05 00 30 81 99 31 20 30 1E 06 09 2A 86 48 86 F7
0D 01 09 01 16 11 63 65 72 74 2D 72 65 71 40 77
63 6F 6D 2E 63 6F 6D 31 0B 30 09 06 03 55 04 06
13 02 55 53 31 0B 30 09 06 03 55 04 08 13 02 43
4F 31 19 30 17 06 03 55 04 07 13 10 43 6F 6C 6F
72 61 64 6F 20 53 70 72 69 6E 67 73 31 0C 30 0A
06 03 55 04 0A 13 03 4D 43 49 31 0C 30 0A 06 03
55 04 0B 13 03 4E 41 53 31 24 30 22 06 03 55 04
03 13 1B 4D 43 49 20 54 65 73 74 20 61 6E 64 20
44 65 76 65 6C 6F 70 6D 65 6E 74 20 43 41 30 1E
17 0D 30 36 30 35 31 30 31 36 34 37 33 36 5A 17
0D 31 31 30 35 31 30 31 36 35 37 33 36 5A 30 81
90 31 30 30 2E 06 09 2A 86 48 86 F7 0D 01 09 01
16 21 67 65 72 61 6C 64 2E 6A 65 72 6F 6D 65 40
76 65 72 69 7A 6F 6E 62 75 73 69 6E 65 73 73 2E
63 6F 6D 31 0B 30 09 06 03 55 04 06 13 02 55 53
31 0B 30 09 06 03 55 04 08 13 02 4F 52 31 11 30
0F 06 03 55 04 07 13 08 50 6F 72 74 6C 61 6E 64
31 0C 30 0A 06 03 55 04 0A 13 03 4D 43 49 31 0B
30 09 06 03 55 04 0B 13 02 49 54 31 14 30 12 06
03 55 04 03 13 0B 53 61 66 65 20 43 6C 69 65 6E
74 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01
01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01
01 00 9A 44 E8 B1 CF 6A 49 5C 0A E7 E6 26 64 39
DF 73 A3 8B 59 23 6C 57 FC 0A F6 3D 82 53 51 C7
53 38 A3 7F CD A7 01 10 D4 9C B7 39 26 96 4A 61
35 81 93 11 E5 8D 54 54 B1 17 83 D6 05 95 9C E5
62 F3 5A B3 E3 43 F2 63 A2 87 12 DE EA 43 A4 41
BF 7E 8C DB 2C 17 2A B1 39 C8 DF A9 EE 74 12 D2
51 9C 7F 8F 45 AB A7 BE EB 3C 5A D9 D8 F9 19 5F
7C 9C 81 BB 06 0E 02 56 B9 6D CE 13 DE 53 C6 76
C2 BA 35 7E 00 A7 1E 6B 9C 92 B0 A8 17 24 F7 1E
AA CF B1 AF A3 7D 61 0A 83 C8 0F CE 8B 5A B6 7A
A0 EE 9C 57 57 7F 50 63 79 C4 7E C7 76 42 01 29
EC FA A2 52 09 9F 4E FC 15 25 1A 4A 7E 3F B2 F6
D0 55 3C 4E 1E AF 4A 71 FD 13 94 1A 0C 5B 42 AD
7F B7 97 5E AC 7C 1E 4A 9B DF A6 C6 C7 CC 57 F9
2E 93 AE 9E 17 70 03 A5 39 8D 6A 08 34 82 1A 7E
A7 90 86 6B 92 AA AB 64 DE B0 02 22 52 A2 FA 7C
9E 93 02 03 01 00 01 A3 82 02 98 30 82 02 94 30
1E 06 03 55 1D 11 04 17 30 15 82 0D 57 53 41 34
35 56 32 36 32 32 33 37 35 87 04 A6 2F AB 35 30
1D 06 03 55 1D 0E 04 16 04 14 A1 74 0F F6 08 97
1D 4F 30 2E 10 61 F3 ED 84 22 F0 53 91 72 30 81
D5 06 03 55 1D 23 04 81 CD 30 81 CA 80 14 5E 23
81 53 9C 80 7B B7 E8 26 A3 72 5C 34 98 FC C0 CB
24 A3 A1 81 9F A4 81 9C 30 81 99 31 20 30 1E 06
09 2A 86 48 86 F7 0D 01 09 01 16 11 63 65 72 74
2D 72 65 71 40 77 63 6F 6D 2E 63 6F 6D 31 0B 30
09 06 03 55 04 06 13 02 55 53 31 0B 30 09 06 03
55 04 08 13 02 43 4F 31 19 30 17 06 03 55 04 07
13 10 43 6F 6C 6F 72 61 64 6F 20 53 70 72 69 6E
67 73 31 0C 30 0A 06 03 55 04 0A 13 03 4D 43 49
31 0C 30 0A 06 03 55 04 0B 13 03 4E 41 53 31 24
30 22 06 03 55 04 03 13 1B 4D 43 49 20 54 65 73
74 20 61 6E 64 20 44 65 76 65 6C 6F 70 6D 65 6E
74 20 43 41 82 10 2F 06 C1 83 30 75 AF A6 43 FB
5C 2A A4 FF D5 97 30 81 A5 06 03 55 1D 1F 04 81
9D 30 81 9A 30 4A A0 48 A0 46 86 44 68 74 74 70
3A 2F 2F 6E 64 63 6E 61 73 77 65 62 31 2F 43 65
72 74 45 6E 72 6F 6C 6C 2F 4D 43 49 25 32 30 54
65 73 74 25 32 30 61 6E 64 25 32 30 44 65 76 65
6C 6F 70 6D 65 6E 74 25 32 30 43 41 2E 63 72 6C
30 4C A0 4A A0 48 86 46 66 69 6C 65 3A 2F 2F 5C
5C 6E 64 63 6E 61 73 77 65 62 31 5C 43 65 72 74
45 6E 72 6F 6C 6C 5C 4D 43 49 25 32 30 54 65 73
74 25 32 30 61 6E 64 25 32 30 44 65 76 65 6C 6F
70 6D 65 6E 74 25 32 30 43 41 2E 63 72 6C 30 81
D2 06 08 2B 06 01 05 05 07 01 01 04 81 C5 30 81
C2 30 5E 06 08 2B 06 01 05 05 07 30 02 86 52 68
74 74 70 3A 2F 2F 6E 64 63 6E 61 73 77 65 62 31
2F 43 65 72 74 45 6E 72 6F 6C 6C 2F 6E 64 63 6E
61 73 77 65 62 31 5F 4D 43 49 25 32 30 54 65 73
74 25 32 30 61 6E 64 25 32 30 44 65 76 65 6C 6F
70 6D 65 6E 74 25 32 30 43 41 28 31 29 2E 63 72
74 30 60 06 08 2B 06 01 05 05 07 30 02 86 54 66
69 6C 65 3A 2F 2F 5C 5C 6E 64 63 6E 61 73 77 65
62 31 5C 43 65 72 74 45 6E 72 6F 6C 6C 5C 6E 64
63 6E 61 73 77 65 62 31 5F 4D 43 49 25 32 30 54
65 73 74 25 32 30 61 6E 64 25 32 30 44 65 76 65
6C 6F 70 6D 65 6E 74 25 32 30 43 41 28 31 29 2E
63 72 74 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05
05 00 03 41 00 C0 1E DA AC 98 FB 2F C0 E0 3F 9D
F2 88 A5 59 3A 05 EC F2 A3 6F 65 A4 0E DD 20 1A
95 3D B6 84 34 A3 F1 17 30 BB F8 3A 6C A3 69 6F
7E B6 30 75 58 33 E8 33 FA E0 57 CE F0 D9 8D 5C
B9 B0 30 E6 BC 00 03 33 30 82 03 2F 30 82 02 D9
A0 03 02 01 02 02 10 2F 06 C1 83 30 75 AF A6 43
FB 5C 2A A4 FF D5 97 30 0D 06 09 2A 86 48 86 F7
0D 01 01 05 05 00 30 81 99 31 20 30 1E 06 09 2A
86 48 86 F7 0D 01 09 01 16 11 63 65 72 74 2D 72
65 71 40 77 63 6F 6D 2E 63 6F 6D 31 0B 30 09 06
03 55 04 06 13 02 55 53 31 0B 30 09 06 03 55 04
08 13 02 43 4F 31 19 30 17 06 03 55 04 07 13 10
43 6F 6C 6F 72 61 64 6F 20 53 70 72 69 6E 67 73
31 0C 30 0A 06 03 55 04 0A 13 03 4D 43 49 31 0C
30 0A 06 03 55 04 0B 13 03 4E 41 53 31 24 30 22
06 03 55 04 03 13 1B 4D 43 49 20 54 65 73 74 20
61 6E 64 20 44 65 76 65 6C 6F 70 6D 65 6E 74 20
43 41 30 1E 17 0D 30 33 30 34 31 35 31 38 35 32
35 32 5A 17 0D 32 36 30 34 31 34 31 38 35 30 32
38 5A 30 81 99 31 20 30 1E 06 09 2A 86 48 86 F7
0D 01 09 01 16 11 63 65 72 74 2D 72 65 71 40 77
63 6F 6D 2E 63 6F 6D 31 0B 30 09 06 03 55 04 06
13 02 55 53 31 0B 30 09 06 03 55 04 08 13 02 43
4F 31 19 30 17 06 03 55 04 07 13 10 43 6F 6C 6F
72 61 64 6F 20 53 70 72 69 6E 67 73 31 0C 30 0A
06 03 55 04 0A 13 03 4D 43 49 31 0C 30 0A 06 03
55 04 0B 13 03 4E 41 53 31 24 30 22 06 03 55 04
03 13 1B 4D 43 49 20 54 65 73 74 20 61 6E 64 20
44 65 76 65 6C 6F 70 6D 65 6E 74 20 43 41 30 5C
30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03
4B 00 30 48 02 41 00 C8 D5 A1 0E 0B 4A DB CE FB
19 07 DB 7C 26 8B F6 8A 47 41 4C 81 83 83 FE EC
E0 F7 1F 3B 86 AE E8 7A E9 A9 7B 0D 0F 4C F2 DE
D1 10 13 83 9E 12 CD C4 8A BC 7E BB FF B1 19 6D
9F 87 71 D2 57 A0 53 02 03 01 00 01 A3 81 FA 30
81 F7 30 0B 06 03 55 1D 0F 04 04 03 02 01 C6 30
0F 06 03 55 1D 13 01 01 FF 04 05 30 03 01 01 FF
30 1D 06 03 55 1D 0E 04 16 04 14 5E 23 81 53 9C
80 7B B7 E8 26 A3 72 5C 34 98 FC C0 CB 24 A3 30
81 A5 06 03 55 1D 1F 04 81 9D 30 81 9A 30 4A A0
48 A0 46 86 44 68 74 74 70 3A 2F 2F 6E 64 63 6E
61 73 77 65 62 31 2F 43 65 72 74 45 6E 72 6F 6C
6C 2F 4D 43 49 25 32 30 54 65 73 74 25 32 30 61
6E 64 25 32 30 44 65 76 65 6C 6F 70 6D 65 6E 74
25 32 30 43 41 2E 63 72 6C 30 4C A0 4A A0 48 86
46 66 69 6C 65 3A 2F 2F 5C 5C 6E 64 63 6E 61 73
77 65 62 31 5C 43 65 72 74 45 6E 72 6F 6C 6C 5C
4D 43 49 25 32 30 54 65 73 74 25 32 30 61 6E 64
25 32 30 44 65 76 65 6C 6F 70 6D 65 6E 74 25 32
30 43 41 2E 63 72 6C 30 10 06 09 2B 06 01 04 01
82 37 15 01 04 03 02 01 01 30 0D 06 09 2A 86 48
86 F7 0D 01 01 05 05 00 03 41 00 3C AB 4F 15 45
29 EA B4 98 D9 28 25 EB E3 D5 0B AA EB B3 31 9C
75 95 6F 57 DC 1B 7C 6B CE 14 FE 73 95 FF 1D AA
07 15 22 CA 5A CA CC F6 8D 29 30 8C 2F 33 EE 22
7F C6 C5 FF 60 69 31 9C A3 1F 7D 10 00 01 02 01
00 5B EA 41 74 83 1E 34 C4 B6 13 43 3A 7F 8A 54
75 F7 54 B4 5F 42 CC C9 A9 A7 4E 5F 3B F9 9F 4A
ED 60 29 6D 33 AF 88 23 F5 19 6F F3 2C 80 23 C0
7B 36 F7 6A BA A4 CE 0F BC 2C 8E B4 B0 FD 7C 57
DE 58 7C B8 DB D5 65 D7 0F CF C2 AB 01 78 C6 9D
6F 19 FE 0F F1 F8 C9 E6 0F DB 56 DD 8C 9F 58 83
92 F6 32 2C D7 DB 2D E0 21 E2 81 75 81 07 73 D2
A6 9C 82 65 94 E5 F5 63 FC 91 0F 3C EF 24 B2 D0
6A 28 57 7B 77 9A C8 ED FD 85 47 2C 63 53 C6 72
9E 2A CA 3F 88 F0 42 33 B6 61 16 25 CC A7 A1 FE
05 6A 93 FB 5E E3 19 05 3E 9A 53 4D 64 50 02 39
B7 1D 38 02 47 DC C7 E0 FB EC AE D1 6C 21 7B C7
8B B9 48 33 C4 75 16 B2 C4 3D 1E 66 16 7F 2B 5A
34 93 FC 80 7A 1A EC 6E FE 35 9A 71 5F 73 76 C0
57 6C 82 4F 20 E7 17 C8 CE 63 8B 15 85 25 32 AF
25 B8 9C D6 B9 0C C2 76 22 F1 26 4E E4 23 22 CD
45 0F 00 01 00 1F EE E9 98 FF 36 2D 8E 44 EF 92
B1 07 3F A7 F6 5E CE CE 4C 22 3F 39 F1 C7 1B 9D
26 9D 3E BD B2 4A A5 C4 7C 6D EE EE 0D 78 28 A9
BB 72 40 D5 A8 70 04 2A 6F 85 4F E4 CA C1 79 F5
BD 66 C8 38 C5 7E E9 FF A6 07 0B 15 59 F0 E6 C0
EB 72 8D 5F 33 DA F3 16 AA A3 D5 CF C3 A1 C3 EC
B4 90 FA 6F E3 2F D4 5E A1 BB FC 22 3C AC E1 92
00 6A 1E F4 42 C2 7F 9A 93 82 1E 49 5C 14 44 04
2F 3E 6F 62 15 56 C5 37 EA 1C FD 89 16 AF EC 32
AA 11 F4 72 F4 9B 95 4F 59 B0 31 84 99 FD 9F 2F
D2 A3 8F C3 7B CF AB 12 19 51 0B D7 AD 26 A5 C9
CB EC B8 18 AC 7B D8 2F F5 43 F6 E6 8F B5 BA B6
A8 05 96 34 A4 83 67 C4 FF 41 2F 98 A6 0C F7 5E
6A 88 74 D6 EB AD 40 6A 25 7E 9F 7E 17 6A 09 B4
4A B5 49 1A 1E EE 73 49 48 FC 0B D2 49 64 1C 09
B6 EF F0 E0 E6 43 ED AC 90 B6 7B F5 24 C1 32 5D
C3 7B 4D AC 57
socket[main] SSLSocketImpl: HS status: NEED_WRAP NEED_WRAP
prf[main] secret[48]:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44
A0 BC 88 AE 9B 1E A0 EE C2 55 BA AF 01 C9 1D 3B
AC 79 C1 64 FD 9A ED 1F AF 21 F9 97 40 74 E6 31
prf[main] label[15]:
63 6C 69 65 6E 74 20 66 69 6E 69 73 68 65 64
prf[main] seed[36]:
34 0A 4E CB B7 BC A3 F9 DA E9 1B 2E BB 21 5B 1A
E0 1C 2C 8C 50 48 2D 70 EE 4F 51 57 05 70 F5 C4
08 3A 82 03
prf[main] MD5 key:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44
A0 BC 88 AE 9B 1E A0 EE
prf[main] SHA1 key:
C2 55 BA AF 01 C9 1D 3B AC 79 C1 64 FD 9A ED 1F
AF 21 F9 97 40 74 E6 31
prf[main] P_MD5:
80 C3 AB C5 90 7B C9 C4 1A 07 94 51
prf[main] PRF:
22 AD 88 CB 4D 84 E0 F4 0B 08 3B A5
prf[main] secret[48]:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44
A0 BC 88 AE 9B 1E A0 EE C2 55 BA AF 01 C9 1D 3B
AC 79 C1 64 FD 9A ED 1F AF 21 F9 97 40 74 E6 31
prf[main] label[15]:
73 65 72 76 65 72 20 66 69 6E 69 73 68 65 64
prf[main] seed[36]:
57 B8 73 27 91 03 35 4D 50 34 B2 D5 84 C5 C5 F5
82 3B 35 73 0B 1A AC 06 92 63 E7 DB 7D 56 37 2E
FE 4E C8 B9
prf[main] MD5 key:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44
A0 BC 88 AE 9B 1E A0 EE
prf[main] SHA1 key:
C2 55 BA AF 01 C9 1D 3B AC 79 C1 64 FD 9A ED 1F
AF 21 F9 97 40 74 E6 31
prf[main] P_MD5:
85 F4 99 31 A2 20 21 58 FF 66 A0 9A
prf[main] PRF:
B7 CC 42 A7 2D 0E 82 24 E6 7A 81 60
record[main] SSLRecordProtocol.setSession: Set pending session
record[main] cipher name: TLS_RSA_WITH_RC4_128_MD5
prf[main] secret[48]:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44
A0 BC 88 AE 9B 1E A0 EE C2 55 BA AF 01 C9 1D 3B
AC 79 C1 64 FD 9A ED 1F AF 21 F9 97 40 74 E6 31
prf[main] label[13]:
6B 65 79 20 65 78 70 61 6E 73 69 6F 6E
prf[main] seed[64]:
45 3D 15 1B CF 40 57 BF 9C 29 6A 8C 19 DA A2 12
2B 26 B1 91 27 EB 82 85 FE FE CF E1 DD 04 27 F7
16 16 16 16 C9 61 E8 E5 AF C5 5C 6E 8A C9 68 77
9D 47 46 66 CA 8C D2 4B FD 75 F3 96 78 AA FE 3E
prf[main] MD5 key:
76 F7 15 48 70 51 F9 7F B1 80 FD 2F 18 67 6F 44
A0 BC 88 AE 9B 1E A0 EE
prf[main] SHA1 key:
C2 55 BA AF 01 C9 1D 3B AC 79 C1 64 FD 9A ED 1F
AF 21 F9 97 40 74 E6 31
prf[main] P_MD5:
F7 4B D9 30 FC 72 95 5E 8A 51 58 F8 02 FF 24 4B
67 F3 1E 3A 2D 2E CB C5 E4 19 BE 37 4F CD B0 2D
5C 29 B6 02 EA 5A 96 37 75 72 1D 23 DC 06 BD 07
82 BD D4 F6 9D B0 4A D4 AE 08 D3 93 FA 6F B5 41
prf[main] PRF:
80 6F CA 49 51 AE 05 BE F7 4B 8E 0C 78 08 30 E3 97 C5 A4 4C
8B E3 21 21 7F 25 68 30 B7 5D ED A6 20 38 18 01 53 FC D8 F4
B6 A1 29 B0 8E 3A CE 04 16 B3 22 86 EC E0 27 DD 8B EA C6 A0
FC 89 A3 00
record[main] SSLRecordProtocol.getChangeCipherSpecMesage
record[main] activeWriteState = pendingConnectionState
14 03 01 00 01 01
socket[main] SSLSocketImpl: HS status: NEED_WRAP NEED_WRAP
record[main] SSLRecordProtocol.wrap: TLSPlaintext.fragment[16]:
14 00 00 0C 22 AD 88 CB 4D 84 E0 F4 0B 08 3B A5
record[main] SSLRecordProtocol.wrap: TLSCiphertext.fragment[32]:
11 08 A7 6D 60 CA C9 4E 48 6A A3 D3 30 1B 65 4C
22 75 99 2F 02 60 71 81 0F 4E B3 E5 FA D1 31 64
socket[main] SSLSocketImpl: HS status: NEED_UNWRAP NEED_UNWRAP
record[main] SSLRecordProtocol.unwrap: BEGIN [
record[main] Got the message of type: 21
record[main] TLSCiphertext.fragment[2]: ...
02 32
record[main] SSLRecordProtocol.allert: 2 50
record[main] SSLRecordProtocol:unwrap ] END, type: 21
javax.net.ssl.SSLException: Fatal alert received decode_error
at
org.apache.harmony.xnet.provider.jsse.SSLSocketImpl.processAlert(SSLSocketIm
pl.java:791)
at
org.apache.harmony.xnet.provider.jsse.SSLSocketImpl.doHandshake(SSLSocketImp
l.java:732)
at
org.apache.harmony.xnet.provider.jsse.SSLSocketImpl.startHandshake(SSLSocket
Impl.java:438)
at CreateSSLEng.<init>(CreateSSLEng.java:72)
at CreateSSLEng.main(CreateSSLEng.java:93)
Thanks for helping. Hopefully we'll get this solved soon.
Regards,
Gerald Jerome
Vnet 262-2375
Index:
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/DigitalSignature.java
===================================================================
---
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/DigitalSignature.java
(revision 466937)
+++
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/DigitalSignature.java
(working copy)
@@ -71,6 +71,7 @@
public DigitalSignature(int keyExchange) {
try {
if (keyExchange == CipherSuite.KeyExchange_RSA_EXPORT ||
+ keyExchange == CipherSuite.KeyExchange_RSA ||
keyExchange == CipherSuite.KeyExchange_DHE_RSA ||
keyExchange == CipherSuite.KeyExchange_DHE_RSA_EXPORT) {
// SignatureAlgorithm is rsa
Index:
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/ClientHandshakeImpl.java
===================================================================
---
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/ClientHandshakeImpl.java
(revision 466937)
+++
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/ClientHandshakeImpl.java
(working copy)
@@ -29,6 +29,7 @@
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
import java.security.PrivilegedExceptionAction;
import java.security.PublicKey;
import java.security.cert.CertificateException;
@@ -366,6 +367,8 @@
* client messages, computers masterSecret, sends ChangeCipherSpec
*/
void processServerHelloDone() {
+ PrivateKey clientKey = null;
+
if (serverCert != null) {
if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon
|| session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon_EXPORT) {
@@ -389,8 +392,10 @@
.getTypesAsString(),
certificateRequest.certificate_authorities, null);
if (clientAlias != null) {
- certs = ((X509ExtendedKeyManager) parameters.getKeyManager())
- .getCertificateChain((clientAlias));
+ X509ExtendedKeyManager km = (X509ExtendedKeyManager) parameters
+ .getKeyManager();
+ certs = km.getCertificateChain((clientAlias));
+ clientKey = km.getPrivateKey(clientAlias);
}
session.localCertificates = certs;
clientCert = new CertificateMessage(certs);
@@ -503,27 +508,29 @@
computerMasterSecret();
- if (clientCert != null) {
- boolean[] keyUsage = clientCert.certs[0].getKeyUsage();
- if (keyUsage != null && keyUsage[0]) {
- // Certificate verify
- DigitalSignature ds = new DigitalSignature(
- session.cipherSuite.keyExchange);
- if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_RSA_EXPORT
- || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA
- || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA_EXPORT) {
- ds.setMD5(io_stream.getDigestMD5());
- ds.setSHA(io_stream.getDigestSHA());
- } else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_DSS
- || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_DSS_EXPORT) {
- ds.setSHA(io_stream.getDigestSHA());
- // The Signature should be empty in case of anonimous
signature algorithm:
- // } else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon ||
- // session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon_EXPORT) {
- }
- certificateVerify = new CertificateVerify(ds.sign());
- send(certificateVerify);
+ // send certificate verify for all certificates except those containing
+ // fixed DH parameters
+ if (clientCert != null && !clientKeyExchange.isEmpty()) {
+ // Certificate verify
+ DigitalSignature ds = new DigitalSignature(
+ session.cipherSuite.keyExchange);
+ ds.init(clientKey);
+
+ if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_RSA_EXPORT
+ || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_RSA
+ || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA
+ || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA_EXPORT) {
+ ds.setMD5(io_stream.getDigestMD5());
+ ds.setSHA(io_stream.getDigestSHA());
+ } else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_DSS
+ || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_DSS_EXPORT) {
+ ds.setSHA(io_stream.getDigestSHA());
+ // The Signature should be empty in case of anonimous signature
algorithm:
+ // } else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon ||
+ // session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon_EXPORT) {
}
+ certificateVerify = new CertificateVerify(ds.sign());
+ send(certificateVerify);
}
sendChangeCipherSpec();
Index:
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/HandshakeIODataStream.java
===================================================================
---
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/HandshakeIODataStream.java
(revision 466937)
+++
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/HandshakeIODataStream.java
(working copy)
@@ -425,6 +425,30 @@
}
/**
+ * Returns the MD5 digest of the data passed throught the stream
+ * except last message
+ * @return MD5 digest
+ */
+ protected byte[] getDigestMD5withoutLast() {
+ synchronized (md5) {
+ md5.update(buffer, 0, marked_pos);
+ return md5.digest();
+ }
+ }
+
+ /**
+ * Returns the SHA-1 digest of the data passed throught the stream
+ * except last message
+ * @return SHA-1 digest
+ */
+ protected byte[] getDigestSHAwithoutLast() {
+ synchronized (sha) {
+ sha.update(buffer, 0, marked_pos);
+ return sha.digest();
+ }
+ }
+
+ /**
* Returns all the data passed throught the stream
* @return all the data passed throught the stream at the moment
*/
Index:
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/CertificateRequest.java
===================================================================
---
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/CertificateRequest.java
(revision 466937)
+++
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/CertificateRequest.java
(working copy)
@@ -29,6 +29,7 @@
import java.io.IOException;
import java.security.cert.X509Certificate;
+import java.util.Vector;
import javax.security.auth.x500.X500Principal;
@@ -57,7 +58,7 @@
/**
* Certificate authorities
*/
- final X500Principal[] certificate_authorities;
+ X500Principal[] certificate_authorities;
//Requested certificate types as Strings
// ("RSA", "DSA", "DH_RSA" or "DH_DSA")
@@ -109,12 +110,17 @@
certificate_authorities = new X500Principal[size];
int totalPrincipalsLength = 0;
int principalLength = 0;
- for (int i = 0; i < size; i++) {
+ Vector principals = new Vector();
+ while (totalPrincipalsLength < size) {
principalLength = in.readUint16(); // encoded X500Principal size
- certificate_authorities[i] = new X500Principal(in);
+ principals.add(new X500Principal(in));
totalPrincipalsLength += 2;
totalPrincipalsLength += principalLength;
}
+ certificate_authorities = new X500Principal[principals.size()];
+ for (int i = 0; i < certificate_authorities.length; i++) {
+ certificate_authorities[i] = (X500Principal)
principals.elementAt(i);
+ }
this.length = 3 + certificate_types.length + totalPrincipalsLength;
if (this.length != length) {
fatalAlert(AlertProtocol.DECODE_ERROR,
@@ -134,8 +140,12 @@
for (int i = 0; i < certificate_types.length; i++) {
out.write(certificate_types[i]);
}
- out.writeUint16(certificate_authorities.length);
+ int authoritiesLength = 0;
for (int i = 0; i < certificate_authorities.length; i++) {
+ authoritiesLength += encoded_principals[i].length +2;
+ }
+ out.writeUint16(authoritiesLength);
+ for (int i = 0; i < certificate_authorities.length; i++) {
out.writeUint16(encoded_principals[i].length);
out.write(encoded_principals[i]);
}
Index:
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImpl.java
===================================================================
---
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImpl.java
(revision 466937)
+++
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImpl.java
(working copy)
@@ -184,29 +184,19 @@
certificateVerify = new CertificateVerify(io_stream,
length);
DigitalSignature ds = new
DigitalSignature(session.cipherSuite.keyExchange);
+ ds.init(serverCert.certs[0]);
byte[] md5_hash = null;
byte[] sha_hash = null;
- PublicKey pk = serverCert.certs[0].getPublicKey();
- if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_RSA_EXPORT) {
- int l;
- try {
- l = getRSAKeyLength(pk);
- } catch (Exception e) {
- fatalAlert(AlertProtocol.INTERNAL_ERROR,
- "INTERNAL ERROR", e);
- return;
- }
- if (l > 512) { // key is longer than 512 bits
- md5_hash = io_stream.getDigestMD5();
- sha_hash = io_stream.getDigestSHA();
- }
- } else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA
+
+ if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_RSA_EXPORT
+ || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_RSA
+ || session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA
|| session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_RSA_EXPORT) {
- md5_hash = io_stream.getDigestMD5();
- sha_hash = io_stream.getDigestSHA();
+ md5_hash = io_stream.getDigestMD5withoutLast();
+ sha_hash = io_stream.getDigestSHAwithoutLast();
} else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_DSS
|| session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DHE_DSS_EXPORT) {
- sha_hash = io_stream.getDigestSHA();
+ sha_hash = io_stream.getDigestSHAwithoutLast();
} else if (session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon
|| session.cipherSuite.keyExchange ==
CipherSuite.KeyExchange_DH_anon_EXPORT) {
}
@@ -712,7 +702,7 @@
} else {
if ((parameters.getNeedClientAuth() && clientCert == null)
|| clientKeyExchange == null
- || (clientKeyExchange.isEmpty() && certificateVerify ==
null)) {
+ || (clientCert != null && !clientKeyExchange.isEmpty() &&
certificateVerify == null)) {
unexpectedMessage();
} else {
changeCipherSpecReceived = true;
Index:
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/CertificateVerify.java
===================================================================
---
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/CertificateVerify.java
(revision 466937)
+++
modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/CertificateVerify.java
(working copy)
@@ -63,11 +63,12 @@
throws IOException {
if (length == 0) {
signedHash = new byte[0];
- } else if (length == 20 || length == 36) {
- signedHash = in.read(length);
} else {
- fatalAlert(AlertProtocol.DECODE_ERROR,
- "DECODE ERROR: incorrect CertificateVerify");
+ if (in.readUint16() != length - 2) {
+ fatalAlert(AlertProtocol.DECODE_ERROR,
+ "DECODE ERROR: incorrect CertificateVerify");
+ }
+ signedHash = in.read(length -2);
}
this.length = length;
}
@@ -79,6 +80,7 @@
*/
public void send(HandshakeIODataStream out) {
if (signedHash.length != 0) {
+ out.writeUint16(signedHash.length);
out.write(signedHash);
}
}