Hi,
I need to communicate to a URL on internet through a proxy server. The
proxy server has kerberos authentication integrated with an Active
Directory. In my program I specify the "Proxy server" and a valid Active
Directory user account for the Proxy Server but communication fails with an
error that Proxy Authentication Required. By debugging I see that
InitSecContext method has been called and a service ticket have been
fetched. PFA programOutput.txt the output of program.
It seems to me that code in GGSSchemeBase is inconsistent. In the method
authenticate, the state is set to TOKEN_GENERATED; but when parseChallenge
method is called again by the HttpAthenticator class, the state is set to
FAILED. Following is the code in GGSSchemeBase.java method parseChallenge
if (state == State.UNINITIATED) {
token = base64codec.decode(challenge.getBytes());
state = State.CHALLENGE_RECEIVED;
} else {
log.debug("Authentication already attempted");
state = State.FAILED;
}
If some one has already used Kerberos authentication with proxy server or
target server, please give me some sample code.
Thank you for help.
Deepak
Debug is true storeKey false useTicketCache true useKeyTab false doNotPrompt
false ticketCache is null isInitiator true KeyTab is null refreshKrb5Config is
false principal is null tryFirstPass is false useFirstPass is false storePass
is false clearPass is false
Acquire TGT from Cache
>>>KinitOptions cache name is C:\Documents and
>>>Settings\administrator.TEST\krb5cc_administrator
>>>DEBUG <CCacheInputStream> client principal is [email protected]
>>>DEBUG <CCacheInputStream> server principal is krbtgt/[email protected]
>>>DEBUG <CCacheInputStream> key type: 23
>>>DEBUG <CCacheInputStream> auth time: Sun Nov 04 16:33:14 GMT+05:30 2012
>>>DEBUG <CCacheInputStream> start time: Sun Nov 04 16:33:14 GMT+05:30 2012
>>>DEBUG <CCacheInputStream> end time: Mon Nov 05 02:33:14 GMT+05:30 2012
>>>DEBUG <CCacheInputStream> renew_till time: Thu Jan 01 05:30:00 GMT+05:30 1970
>>> CCacheInputStream: readFlags() INITIAL; PRE_AUTH;
Host address is /172.25.194.209
>>> KrbCreds found the default ticket granting ticket in credential cache.
>>> Obtained TGT from LSA: Credentials:
[email protected]
server=krbtgt/[email protected]
authTime=20121104110314Z
startTime=20121104110314Z
endTime=20121104210314Z
renewTill=19700101000000Z
flags: INITIAL;PRE-AUTHENT
EType (int): 23
Principal is [email protected]
Commit Succeeded
Found ticket for [email protected] to go to krbtgt/[email protected]
expiring on Mon Nov 05 02:33:14 GMT+05:30 2012
Entered Krb5Context.initSecContext with state=STATE_NEW
Service ticket not found in the subject
>>> Credentials acquireServiceCreds: same realm
>>> KdcAccessibility: reset
Using builtin default etypes for default_tgs_enctypes
default etypes for default_tgs_enctypes: 3 1 23 16 17 18.
>>> CksumType: sun.security.krb5.internal.crypto.RsaMd5CksumType
>>> EType: sun.security.krb5.internal.crypto.ArcFourHmacEType
>>> KrbKdcReq send: kdc=win-xtqhaqj5814.test.local UDP:88, timeout=30000,
>>> number of retries =3, #bytes=1421
>>> KDCCommunication: kdc=win-xtqhaqj5814.test.local UDP:88,
>>> timeout=30000,Attempt =1, #bytes=1421
>>> KrbKdcReq send: #bytes read=1456
>>> KrbKdcReq send: #bytes read=1456
>>> KdcAccessibility: remove win-xtqhaqj5814.test.local
>>> EType: sun.security.krb5.internal.crypto.ArcFourHmacEType
>>> KrbApReq: APOptions are 00100000 00000000 00000000 00000000
>>> EType: sun.security.krb5.internal.crypto.DesCbcMd5EType
Krb5Context setting mySeqNumber to: 107022887
Created InitSecContextToken:
0000: 01 00 6E 82 05 5E 30 82 05 5A A0 03 02 01 05 A1 ..n..^0..Z......
0010: 03 02 01 0E A2 07 03 05 00 20 00 00 00 A3 82 04 ......... ......
0020: 82 61 82 04 7E 30 82 04 7A A0 03 02 01 05 A1 0F .a...0..z.......
0030: 1B 0D 51 41 2E 53 43 43 4D 2E 4C 4F 43 41 4C A2 ..TEST.LOCAL.
0040: 2C 30 2A A0 03 02 01 00 A1 23 30 21 1B 04 48 54 ,0*......#0!..HT
0050: 54 50 1B 19 75 62 75 6E 74 75 78 36 34 2D 31 2E TP..ubuntux64-1.
0060: 71 61 2E 73 63 63 6D 2E 6C 6F 63 61 6C A3 82 04 test.local...
0070: 32 30 82 04 2E A0 03 02 01 12 A1 03 02 01 09 A2 20..............
0080: 82 04 20 04 82 04 1C 83 40 DD FA 65 7C 6B 62 17 .. [email protected].
0090: E6 0B 04 15 20 AC 8E 33 37 01 DF 97 E9 EA C7 BA .... ..37.......
00A0: 8A 2D 2C A7 2C D5 8B 7A 7A CD 5D 02 C5 C4 EF B7 .-,.,..zz.].....
00B0: A7 E0 CB 19 9A 4C 35 A7 B1 64 D8 2C 84 CB CF 0B .....L5..d.,....
00C0: C3 6B FD 12 F0 DE 61 37 53 60 6D 78 35 41 CF E2 .k....a7S`mx5A..
00D0: 4B 2D 16 BF 2E B9 B2 53 67 19 CB A1 EE E3 1E 0E K-.....Sg.......
00E0: 16 E2 E4 57 D9 CD 6B A3 F6 1F 2C CF 3F 54 44 48 ...W..k...,.?TDH
00F0: 23 70 9A 03 39 AD 67 54 6D 12 18 1D 1D 9B CF 2B #p..9.gTm......+
0100: 6A 8D D9 E8 D0 12 30 16 20 64 61 43 15 33 88 D7 j.....0. daC.3..
0110: CD 34 75 7D 8B 18 8B 46 D5 C7 95 E9 D5 8D 68 DC .4u....F......h.
0120: EE 26 66 4D 9C 7B 12 C0 30 51 33 84 63 12 70 12 .&fM....0Q3.c.p.
0130: 6C EE 99 F6 9F 04 92 3C 8B 77 A0 E2 73 C6 B5 FC l......<.w..s...
0140: 54 BA 16 4B 81 94 03 E2 1D EA 2F 2C 2E 1D 0C 92 T..K....../,....
0150: C5 35 98 3A 79 5C 62 BD 50 48 0A 5A A8 12 C0 E2 .5.:y\b.PH.Z....
0160: A2 B5 46 F6 5E 00 51 C6 7E 82 CE 13 A3 BB 46 1F ..F.^.Q.......F.
0170: 0B DC 2C CB A9 F5 C4 41 8F 07 DB 26 2A 57 ED 45 ..,....A...&*W.E
0180: 48 7B 5C 0E 7A 1A F1 80 F2 9C 1D 0F D9 90 24 5F H.\.z.........$_
0190: 2D 23 B5 0D F4 EB 7E AD DC 13 91 B9 0D F3 3E D2 -#............>.
01A0: 89 22 F7 E0 BD A6 DF 53 38 CD 3E CB 20 35 09 DD .".....S8.>. 5..
01B0: E5 5D 68 67 F0 3D 68 86 5E 52 58 BB AF B7 E2 6E .]hg.=h.^RX....n
01C0: 12 39 3D 94 5B 83 3F 8D 8B 48 5A F1 9C ED 8C DF .9=.[.?..HZ.....
01D0: D6 CB 10 82 9C 40 EF AE 6D 8C C3 4C 22 15 D6 2D [email protected]"..-
01E0: 7E B4 EB D9 3A F5 0C 7C 19 5E 6F A8 04 84 70 79 ....:....^o...py
01F0: 17 FF 51 93 C0 2C 3E 4C 28 4C 9A C8 29 6A 30 35 ..Q..,>L(L..)j05
0200: FC 58 23 87 B7 4B EF DF 34 C8 B6 BB 67 97 2E CF .X#..K..4...g...
0210: A2 71 E7 42 7E 40 43 03 3B 1B 43 9C 76 E9 12 8D .q.B.@C.;.C.v...
0220: 9E F0 40 D3 89 EE 57 91 7A 24 37 4D 9F 1A 5D 78 [email protected]$7M..]x
0230: AB C7 6E DE 37 15 0E 56 8C 3C 63 3C E2 DB 50 5C ..n.7..V.<c<..P\
0240: 9B 2B 2F 6D F9 D9 93 3C E8 55 5D AB 40 35 E9 04 .+/m...<.U].@5..
0250: 9A 27 73 89 FD 0D C4 F3 4F 4D C0 2E A3 21 7F 96 .'s.....OM...!..
0260: A8 7C 6D 97 CB 08 68 28 48 4E B7 39 00 13 42 35 ..m...h(HN.9..B5
0270: B6 BC 05 D1 02 57 61 48 D5 22 2D C5 01 12 00 DD .....WaH."-.....
0280: F3 D1 AC 20 66 4B 01 02 D4 74 56 A3 7F 88 A2 7E ... fK...tV.....
0290: 96 DB F5 D3 75 EE 51 03 BF F0 B1 B6 78 AA 90 1F ....u.Q.....x...
02A0: 06 D6 FC 7D F8 2B 4E A4 A3 DA CC B0 E7 3A 95 32 .....+N......:.2
02B0: 66 91 02 15 72 51 72 00 D1 2D 32 90 BB 32 63 61 f...rQr..-2..2ca
02C0: A5 E4 BE 6C 57 49 5D 1F 35 F4 40 F8 91 2D 33 37 ...lWI][email protected]
02D0: 5A 01 D7 00 B9 C9 E1 62 56 D2 C3 29 D7 15 F9 59 Z......bV..)...Y
02E0: B7 D1 E2 98 BC B7 78 A5 AE 23 F8 15 72 A2 B9 A5 ......x..#..r...
02F0: BC 7D FE B3 97 90 64 11 B3 1C 8D 9A 62 94 12 1B ......d.....b...
0300: A4 C7 58 23 E0 CB 6A 1C DB 55 BB 0A 8D 24 BD 0F ..X#..j..U...$..
0310: A6 C4 B2 08 0F 3A 56 E0 E8 51 8F 66 91 E3 B2 E6 .....:V..Q.f....
0320: DF EF BE 9A B3 42 10 53 93 EB FA 07 59 AA 19 7C .....B.S....Y...
0330: 94 F0 1D 0C B3 A1 32 FE 18 3D D9 4F 19 37 DD 5C ......2..=.O.7.\
0340: 17 F3 41 55 71 B4 2D 8F 00 2E FC 1D BD E8 95 7B ..AUq.-.........
0350: 9A 6A 82 34 11 22 F1 8F E3 70 4F 97 2B 03 17 51 .j.4."...pO.+..Q
0360: 99 6C 09 E2 2A 56 DC 79 7D FE ED 95 8A D4 5C 59 .l..*V.y......\Y
0370: 09 FF A2 CF 49 F5 AB D6 F7 17 A8 A5 EF 17 42 CE ....I.........B.
0380: 83 AB A8 38 2C 73 CA 96 ED 44 FD 06 43 EA 13 C0 ...8,s...D..C...
0390: AB ED 6A BE 58 06 91 0E EA 23 77 DC 0F BF B2 2A ..j.X....#w....*
03A0: 18 4A 4D 0D 60 E6 F4 1D DA 83 9B 78 F2 1D 44 6D .JM.`......x..Dm
03B0: 5A 2F 66 3B ED C3 1F 4D DA FB 85 48 F1 5E 5A C0 Z/f;...M...H.^Z.
03C0: B7 21 C6 74 2D 60 BF A3 EF 9D 50 7F AD D3 9B E5 .!.t-`....P.....
03D0: D4 84 19 62 C1 4B A4 18 09 D7 25 B1 A6 C7 0C 57 ...b.K....%....W
03E0: EB 1A 5C 62 3A 95 C1 7C FE 21 58 F9 26 C5 4C 00 ..\b:....!X.&.L.
03F0: BD 61 FD E6 B8 DA 93 63 7F 90 C5 5C F1 63 FD 07 .a.....c...\.c..
0400: E5 77 24 0D 42 4F D0 92 80 F6 13 D3 F0 48 15 0C .w$.BO.......H..
0410: 92 A1 1E 1D 93 28 A5 41 AC 22 0B 24 98 7F 07 D2 .....(.A.".$....
0420: 5F 51 58 DC B4 E2 32 A5 DC 71 35 41 F3 C3 CD BF _QX...2..q5A....
0430: 9B 63 85 6D 92 DB 3F EA 55 7F AE 8C A3 73 3F 40 .c.m..?.U....s?@
0440: C9 BB 9D A6 37 86 0E 91 22 EF 54 CD 50 02 93 B6 ....7...".T.P...
0450: C0 7D EA 47 64 C2 AF 55 56 B6 CE A6 EF 0C 24 78 ...Gd..UV.....$x
0460: 54 66 A2 56 58 80 61 62 EC 37 41 8D E6 D1 C3 A9 Tf.VX.ab.7A.....
0470: 08 10 DA 42 A2 95 C9 56 46 9F 96 C4 DE EB F4 A3 ...B...VF.......
0480: 36 CD AD 47 EB 6B 6F 31 6A 63 C4 9D 22 8A 79 D1 6..G.ko1jc..".y.
0490: C7 65 A1 AB 31 A6 D2 44 5F 3F 9C 81 74 AB 79 4B .e..1..D_?..t.yK
04A0: 05 CA EA A4 81 BE 30 81 BB A0 03 02 01 03 A2 81 ......0.........
04B0: B3 04 81 B0 41 87 CF 9F D6 7C 99 FE 88 40 38 0B ....A........@8.
04C0: 2B 05 47 8B 2F 9F 38 08 88 74 0C 0B AE 44 A2 EB +.G./.8..t...D..
04D0: 3F FE 0A 25 5E 99 96 16 62 04 E0 A4 41 6E 75 B1 ?..%^...b...Anu.
04E0: 32 D6 7A 53 A1 A0 35 F8 09 F8 21 20 8C A3 7E 91 2.zS..5...! ....
04F0: C2 D6 4B 43 C4 B4 B1 EF 2D 38 5C 4F E6 F8 6B 3D ..KC....-8\O..k=
0500: 2F 45 3B B6 8F 1A 5B E2 ED C5 71 EC DC 5E 93 33 /E;...[...q..^.3
0510: B5 16 19 A3 41 76 94 30 52 08 B2 DC E6 0C 37 89 ....Av.0R.....7.
0520: 71 19 8F F0 BF 2B EF 1C BC FB BC C4 32 FC FB E3 q....+......2...
0530: A5 8F 98 F0 C2 0C 77 89 DB 84 76 AE 5F 89 5A B3 ......w...v._.Z.
0540: D9 D8 6B 06 EC 28 2E DF AC AD CE E1 BE C6 05 E6 ..k..(..........
0550: 6F D6 7C 8F A9 1E 7E 2D 10 E4 BC 0A 6A 1F 16 8A o......-....j...
0560: D6 C1 7F 5A ...Z
org.apache.http.client.HttpResponseException: Proxy Authentication Required
at
org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:68)
package org.apache.http.examples.client;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Principal;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.Arrays;
import java.util.Collections;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthSchemeRegistry;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.auth.SPNegoSchemeFactory;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.log4j.BasicConfigurator;
public class TestKerberosHttpClient {
private static String kerbHttpHost = "http://www.google.com";
public static void main(String[] args) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException,
KeyManagementException, UnrecoverableKeyException {
BasicConfigurator.configure();
System.setProperty("java.security.auth.login.config",
"login.conf");
System.setProperty("java.security.krb5.conf", "krb5.conf");
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
if( args.length > 0 )
kerbHttpHost = args[0];
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpHost host = new HttpHost("proxyserver.test.local", 3128);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, host);
httpclient.getCredentialsProvider().setCredentials(new
AuthScope("proxyserver.test.local", 3128),
new UsernamePasswordCredentials("TEST\\Administrator",
"adminpasswd"));
AuthSchemeRegistry authSchemeRegistry =
httpclient.getAuthSchemes();
authSchemeRegistry.unregister("Negotiate");
authSchemeRegistry.register("Negotiate", new
SPNegoSchemeFactory(true));
httpclient.setAuthSchemes(authSchemeRegistry);
Credentials use_jaas_creds = new Credentials() {
@Override
public String getPassword() {
return null;
}
@Override
public Principal getUserPrincipal() {
return null;
}
};
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(null, -1, null),
use_jaas_creds);
HttpUriRequest request = new HttpGet(kerbHttpHost);
HttpResponse response = null;
HttpContext httpContext = createHttpContext(httpclient);
try{
response = httpclient.execute(request, httpContext);
String s = new
BasicResponseHandler().handleResponse(response);
System.out.println(s);
} catch ( Exception ex){
ex.printStackTrace();
}
}
static HttpContext createHttpContext(DefaultHttpClient httpclient){
HttpContext context = new BasicHttpContext();
context.setAttribute(
ClientContext.AUTHSCHEME_REGISTRY,
httpclient.getAuthSchemes());
context.setAttribute(
ClientContext.AUTH_SCHEME_PREF,
Collections.unmodifiableList( Arrays.asList(new
String[] {
"negotiate",
"ntlm",
"digest",
"basic"
}))
);
context.setAttribute(
ClientContext.COOKIESPEC_REGISTRY,
httpclient.getCookieSpecs());
context.setAttribute(
ClientContext.COOKIE_STORE,
httpclient.getCookieStore());
context.setAttribute(
ClientContext.CREDS_PROVIDER,
httpclient.getCredentialsProvider());
return context;
}
}
[libdefaults]
default_realm = TEST.LOCAL
dns_lookup_kdc = true
dns_lookup_realm = true
ticket_lifetime = 24h
default_keytab_name = /etc/squid3/proxy.keytab
# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
#forwardable = true
#proxiable = true
[realms]
TEST.LOCAL = {
kdc = win-xtqhaqj5814.test.local
admin_server = win-xtqhaqj5814.test.local
default_domain = test.local
}
[domain_realm]
.test.local = TEST.LOCAL
test.local = TEST.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
com.sun.security.jgss.login {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE
useTicketCache=true debug=true;
};
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE
useTicketCache=true debug=true;
};
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE
useTicketCache=true debug=true;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]