1.kerberos认证debug日志开启
kerberos认证过程比较复杂,而且代码实现过程中存在各种日志信息不明确的情况,这时我们就需要在开发过程中通常需要开启debug日志,来获取更详细的日志信息。
sun.security.krb5.debug控制kerberos认证的debug日志,该参数在sun.security.krb5.internal.Krb5中声明静态常量,被其他类引用。
public static final boolean DEBUG = GetBooleanAction
.privilegedGetProperty("sun.security.krb5.debug");
使用方法如下:
-Dsun.security.krb5.debug=true
sun.security.krb5.internal.Krb5类中还定义了Kerberos认证过程遇到的各种错误信息,例如下图所示:
共定义了70多种错误类型。
2.典型的debug日志
如下所示:
Found ticket for hadoop/tttt-10-4-4-18@TTTT-C2O588YD to go to krbtgt/TTTT-C2O588YD@TTTT-C2O588YD expiring on Thu May 09 08:23:01 CST 2024
Entered Krb5Context.initSecContext with state=STATE_NEW
Found ticket for hadoop/tttt-10-4-4-18@TTTT-C2O588YD to go to krbtgt/TTTT-C2O588YD@TTTT-C2O588YD expiring on Thu May 09 08:23:01 CST 2024
Service ticket not found in the subject
>>> Credentials serviceCredsSingle: same realm
default etypes for default_tgs_enctypes: 18 17.
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
>>> CksumType: sun.security.krb5.internal.crypto.HmacSha1Aes256CksumType
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
>>> KrbKdcReq send: kdc=2402:4c01:4c01:4c01:4c01:4c01:4c01:e3a0 TCP:8888, timeout=3000, number of retries =3, #bytes=825
>>> KDCCommunication: kdc=2402:4c01:4c01:4c01:4c01:4c01:4c01:e3a0 TCP:8888, timeout=3000,Attempt =1, #bytes=825
>>>DEBUG: TCPClient reading 883 bytes
>>> KrbKdcReq send: #bytes read=883
>>> KdcAccessibility: remove [2402:4c01:4c01:4c01:4c01:4c01:4c01:e3a0]:8888
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
>>> TGS credentials serviceCredsSingle:
>>> DEBUG: ----Credentials----
client: hadoop/tttt-10-4-4-18@TTTT-C2O588YD
server: hadoop/tttt-10-4-4-37@TTTT-C2O588YD
ticket: sname: hadoop/tttt-10-4-4-37@TTTT-C2O588YD
startTime: 1715170982000
endTime: 1715214181000
----Credentials end----
>>> KrbApReq: APOptions are 00000000 00000000 00000000 00000000
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
Krb5Context setting mySeqNumber to: 391165593
Krb5Context setting peerSeqNumber to: 391165593
Created InitSecContextToken:
0000: 01 00 6E 82 03 28 30 82 03 24 A0 03 02 01 05 A1 ..n..(0..$......
0010: 03 02 01 0E A2 07 03 05 00 00 00 00 00 A3 82 02 ................
0020: 29 61 82 02 25 30 82 02 21 A0 03 02 01 05 A1 0F )a..%0..!.......
0030: 1B 0D 54 54 54 54 2D 43 32 4F 35 38 38 59 44 A2 ..TTTT-C2O588YD.
0040: 23 30 21 A0 03 02 01 00 A1 1A 30 18 1B 06 68 61 #0!.......0...ha
0050: 64 6F 6F 70 1B 0E 74 74 74 74 2D 31 30 2D 34 2D doop..tttt-10-4-
0060: 34 2D 33 37 A3 82 01 E2 30 82 01 DE A0 03 02 01 4-37....0.......
0070: 12 A1 03 02 01 01 A2 82 01 D0 04 82 01 CC B2 85 ................
0080: 1F CB 45 91 B3 32 B3 DA C4 42 44 8D 24 E8 78 2E ..E..2...BD.$.x.
0090: C2 E6 BC C5 2E 5E 1B EC F1 90 F7 95 55 25 68 AC .....^......U%h.
00A0: 3C 19 64 06 60 0C 9B 8A 99 B8 19 41 26 72 B5 3D <.d.`......A&r.=
00B0: 57 18 9B 9A 46 B0 3C 49 4D 7B 85 75 5A 21 44 1C W...F.<IM..uZ!D.
00C0: B2 92 FE 2F 8F 34 0C 57 C2 DC 53 75 AE F0 B9 6B .../.4.W..Su...k
00D0: A5 C2 0F DD 73 00 D4 A4 6F 78 58 18 C9 36 1D 36 ....s...oxX..6.6
00E0: DF DD BF 5C 06 E0 7F FF 0E D3 61 A3 38 22 75 E0 ...\......a.8"u.
00F0: BC 17 5F AE 69 0C EB ED 1E D6 43 33 2C 1B DC 59 .._.i.....C3,..Y
0100: AB 20 92 D6 71 6F 99 E4 D2 30 8B 51 12 72 F6 AA . ..qo...0.Q.r..
0110: 5C 62 7E 58 D4 D4 FA C0 23 2D 8E A6 D6 54 5A 6F \b.X....#-...TZo
0120: 96 B7 A3 A0 56 BD A7 BD 41 48 B0 C1 E8 FE 60 CF ....V...AH....`.
0130: 68 7C F3 FF F2 D9 05 14 21 7A 5F CB FE 24 28 7C h.......!z_..$(.
0140: EA 87 71 FC 2C E3 DD 73 DC 57 4B 55 4B 7D 90 5F ..q.,..s.WKUK.._
0150: 33 61 01 2E 1B 23 83 B0 C4 62 E2 0A E6 E7 6F 7A 3a...#...b....oz
0160: B1 EA 0D BD E1 15 43 16 09 AD 32 2F C1 A6 95 64 ......C...2/...d
0170: F5 37 88 32 61 D7 08 E8 58 E2 01 B1 13 F5 27 B6 .7.2a...X.....'.
0180: B2 87 32 33 85 36 FC 0B F0 6D BC DC 39 54 30 54 ..23.6...m..9T0T
0190: 6F 07 13 E6 C2 AC D2 9F 3D E3 25 9E BE 4A 23 B6 o.......=.%..J#.
01A0: 5E 0B C5 68 C5 AF 2A 66 27 32 69 7E AD FC AA AC ^..h..*f'2i.....
01B0: C5 6B 61 F9 0A 9C AD C0 5B 20 F5 DE 20 3D B0 E1 .ka.....[ .. =..
01C0: 5C B0 B3 39 DE B3 2D 70 B5 D4 88 D6 E1 39 D0 60 \..9..-p.....9.`
01D0: 27 A5 CC EE 2A 6F 9B C5 4D B9 E2 07 5B BF AA CD '...*o..M...[...
01E0: 9C EB 6A 68 FF 3A 14 E2 63 AB 9E 8A DA F5 66 1C ..jh.:..c.....f.
01F0: 67 5A CD 7A 7E A4 7A 39 18 17 BB AA 58 27 20 AD gZ.z..z9....X' .
0200: 28 09 BD 71 18 60 F8 2C 0B 85 F0 74 D1 F9 89 01 (..q.`.,...t....
0210: 23 2F 4C 59 5B 8E E7 63 B9 C1 C6 9B 77 AB 17 16 #/LY[..c....w...
0220: FC A2 43 F8 1C C5 6D EF 7A 6A 5F B0 1B 32 F7 01 ..C...m.zj_..2..
0230: BC 52 7F CE F2 C5 44 08 01 89 8D 29 65 BF C4 D9 .R....D....)e...
0240: 85 A8 AC 17 94 78 07 1A E8 59 A4 81 E1 30 81 DE .....x...Y...0..
0250: A0 03 02 01 12 A2 81 D6 04 81 D3 77 20 D7 80 C5 ...........w ...
0260: D6 41 DB 0F F6 7D D9 8F F3 DE 35 B6 54 31 18 D1 .A........5.T1..
0270: 5F BE 34 94 AB 2B 95 29 36 8B DD 37 B2 7E 5E 9C _.4..+.)6..7..^.
0280: FC 0B EA 17 F0 83 34 99 23 35 D2 9B D0 0B E3 E5 ......4.#5......
0290: 41 59 6B 69 E9 47 C2 FB FB 38 8D 51 11 EB 2F C8 AYki.G...8.Q../.
02A0: 19 7B 09 50 81 D9 69 88 80 68 39 CD D1 EB 24 A5 ...P..i..h9...$.
02B0: EC D6 38 7F A9 56 38 74 4F 39 F1 D7 97 7A A3 8A ..8..V8tO9...z..
02C0: EC 4A EB C9 37 72 62 20 7E 30 A8 35 A4 D4 BE 6A .J..7rb .0.5...j
02D0: 1C C0 31 44 93 90 CB 16 F6 08 7A 2F 23 B4 A6 4B ..1D......z/#..K
02E0: 97 2D BC BC 9C 1D 47 0D FB 64 0C 1C 47 D0 25 DC .-....G..d..G.%.
02F0: 13 A7 7D C8 0B C7 04 A9 98 8D EC F4 77 D7 27 9D ............w.'.
0300: 88 2B 6A BB 2F BE B3 75 2D 97 DA 3A EB 80 77 4B .+j./..u-..:..wK
0310: 07 5D 4C 6A 19 6A 5D 0B 3D D5 B9 31 EE 4F 87 5F .]Lj.j].=..1.O._
0320: 5D 7A 97 D6 4B A8 B5 77 72 6B 38 79 C8 FD ]z..K..wrk8y..
对于不可打印字符,通过“.”符号输出。
下面,对以上案例中的日志信息的源码进行分析。
2.1.CredentialsUtil输出日志
CredentialsUtil全称为sun.security.krb5.internal.CredentialsUtil,该类中会输出以下日志信息
(1)>>> Credentials acquireServiceCreds
(2)>>> serviceCredsSingle
(3)>>> Credentials serviceCredsSingle
(4)>>> TGS credentials serviceCredsSingle
(5)>>> Handling S4U2Self referral
(6)>>> Handling S4U2Proxy referral
2.2.EType输出日志
EType全称为sun.security.krb5.internal.crypto.EType,该类中会输出以下日志信息
(1)>>> EType
2.3.CksumType 输出日志
CksumType全称为sun.security.krb5.internal.crypto.CksumType ,该类中会输出以下日志信息
(1)>>> CksumType:
2.4.NetClient输出日志
NetClient全称为sun.security.krb5.internal.NetClient,该类中会输出以下日志信息
(1)>>>DEBUG: TCPClient could not read length field
(2)>>>DEBUG: TCPClient reading
(3)>>>DEBUG: TCPClient zero or negative length field:
(4)>>>DEBUG: TCPClient could not read complete packet (
2.5.Config输出日志
Config全称为sun.security.krb5.Config,该类中会输出以下日志信息
(1)default etypes for
2.6.Krb5Context输出日志
Krb5Context全称为sun.security.jgss.krb5.Krb5Context,该类会输出以下日志信息
(1)Attempt to obtain service
(2)Found service ticket in
(3)Service ticket not found in
(4)>>> Constrained deleg from
(5)Entered Krb5Context.initSecContext with
(6)Subject is readOnly;Kerberos Service ticket not stored
(7)Created InitSecContextToken:
2.7.KdcComm输出日志
KdcComm全称为sun.security.krb5.KdcComm,该类会输出以下日志信息
(1)>>> KrbKdcReq send: error trying
(2)>>> KrbKdcReq send: kdc=
(3)>>> KrbKdcReq send: #bytes read=
(4)>>> KDCCommunication: kdc=
(5)>>> KdcAccessibility: add
(6)>>> KdcAccessibility: remove
(7)>>> KdcAccessibility: reset
2.8.Credentials输出日志
Credentials全称为sun.security.krb5.Credentials,该类会输出以下日志信息
(1)>>> DEBUG: ----Credentials----
(2)----Credentials end----
3.日志相关源码查看
一般来说,我们很难通过日志直接定位到对应的源码。因为源码在https://github.com/openjdk/jdk中,如果要查看日志报错的具体信息或逻辑,需要解析该源码。
4.本文的价值
本文主要回答以下两个问题:
(1)在开发过程中,遇到kerberos认证的问题时,如何打开kerberos的debug日志看更详细的日志信息?
(2)如何根据kerberos的debug日志信息定位到对应的源码逻辑。