JGSS: SPNEGO and NTLMv2
Hey there,
I'm getting up to speed on JGSS, both for general Kerberos use and for ActiveDirectory use, and I'm wondering: if the SPNEGO results in NTLM being chosen, does the underlying implementation handle this, or does it fail. (I'm assuming a Windows environment). If it succeeds, does it do so with NTLMv2, or just with NTLMv1?
Just for context, we're using Apache's HttpClient.
thanks in advance,
James
JimDesu wrote:
Hey there,
I'm getting up to speed on JGSS, both for general Kerberos use and for ActiveDirectory use, and I'm wondering: if the SPNEGO results in NTLM being chosen, does the underlying implementation handle this, or does it fail. (I'm assuming a Windows environment). If it succeeds, does it do so with NTLMv2, or just with NTLMv1?Hi James,
There are two HTTP authentication mechanisms that are of interest in a Windows environment. There is WWW-Authenticate: Negotiate and WWW-Authenticate: NTLM. The Negotiate method uses the SPNEGO protocol to negotiate either Kerberos or NTLM. The NTLM method uses the NTLMSSP protocol. SPNEGO is mostly just an envelope around Kerberos or NTLMSSP tokens.
Sun's GSSAPI implementation (a.k.a. JGSS) can only generate and consume raw Kerberos tokens and SPNEGO tokens containing Kerberos tokens.
However, Sun's builtin HTTP client has inlined code that will perform NTLMv1 authentication using the NTLM method.
Just for context, we're using Apache's HttpClient.Apache's HttpClient also only supports NTLMv1. There has been external interest in supporting NTLMv2 but, in general, the Apache crowd has not embraced the NTLM work citing the fact that it is not a standards based technology.
The only 100% Java HTTP client that supports NTLMv2 that I know of is the one included in a library called "Jespa":
[http://www.ioplex.com/jespa.html]
Currently the client is only exposed as a standard HttpURLConnection and URL Handler. However the underlying code supports pipelining, asynchronous I/O and other advanced features that will eventually be exposed.
Mike
Similar Messages
-
JAAS, JGSS Kerberos and windows 2000 newbie question
Hi
I have setup a Kerberos server on windows 2000, now i want to write code in java to authenticate and authorize user using Kerberos , I know I have to use JAAS, JGSS,
is there a how to document to setup a client machine, like setup krb4.ini file and other security files so i can use java to authorize and authenticate, i am using j2sdk1.4.2
I have following code
GSSManager manager = GSSManager.getInstance();
Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1");
// Identify who the client wishes to be
GSSName userName = manager.createName("test02EIM", GSSName.NT_USER_NAME);
// Identify the name of the server. This uses a Kerberos specific
// name format.
GSSName serverName = manager.createName("krbsvr400/[email protected]",
krb5PrincipalNameType);
System.out.println("server name " +serverName.getStringNameType());
// Acquire credentials for the user
GSSCredential userCreds = manager.createCredential(userName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.INITIATE_ONLY);
// Instantiate and initialize a security context that will be
// established with the server
GSSContext context = manager.createContext(serverName,
krb5Mechanism,
userCreds,
GSSContext.DEFAULT_LIFETIME);
and krb5.ini file looks like below
[libdefaults]
default_realm = GL1AMR.PFIZER1.TEST
default_tgs_enctypes = des-cbc-crc
default_tkt_enctypes = des-cbc-crc
forwardable = true
proxiable = true
[realms]
GL1AMR.PFIZER1.TEST= {
kdc = gl1mopsamrdc01.gl1amr.pfizer1.test:88
admin_server = gl1mopsamrdc03.gl1amr.pfizer1.test
default_domain = gl1amr.pfizer1.test
[domain_realm]
.gl1amr.pfizer1.test = GL1AMR.PFIZER1.TEST
gl1amr.pfizer1.testm = GL1AMR.PFIZER1.TEST
[login]
krb4_convert = true
krb4_get_tickets = true
i get following error
SSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Ticket)
at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:143)
at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:70)
at sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.java:149)
at sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:334)
at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:44)
at sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java:102)
at com.pfizer.maps.sso.TestGSS.useGSS(TestGSS.java:41)
at com.pfizer.maps.sso.TestGSS.main(TestGSS.java:59)
what am i missingMy JAVA FILE having the code as follows , when i run this code iam geeting the Folowing error
Error
D:\Ramesh_Dump\KerbersTools>java GSSAPI
GSSException: No valid credentials provided (Mechanism level: Failed to find any
Kerberos Ticket)
at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredent
ial.java:133)
at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechF
actory.java:72)
at sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.
java:149)
at sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:389)
at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:60)
at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:37)
at sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java
:96)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:1
78)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:1
58)
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5
Client.java:155)
at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:105)
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:214)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2637)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:283)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.ja
va:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav
a:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
67)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:1
34)
at GSSAPI.main(GSSAPI.java:34)
Problem searching directory: javax.naming.AuthenticationException: GSSAPI [Root
exception is javax.security.sasl.SaslException: GSS initiate failed [Caused by G
SSException: No valid credentials provided]]
JAVA CODE
import java.util.Hashtable;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import javax.naming.*;
import java.util.*;
import java.util.Calendar.*;
import java.text.*;
public class GSSAPI {
* @param args
public static void main(String[] args) {
Hashtable env = new Hashtable();
String adminName = "[email protected]";//"[email protected]";
String adminPassword = "Password12";
String ldapURL = "ldap://172.20.55.97:389/";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"GSSAPI");
//env.put(Context.SECURITY_PRINCIPAL,adminName);
//env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//env.put("javax.security.sasl.server.authentication","true");
//connect to my domain controller
env.put(Context.PROVIDER_URL,ldapURL);
try {
//Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
//lets get the domain lockout duration policy
Attributes attrs = ctx.getAttributes("dc=globalv,dc=com");
//System.out.println("test arttr"+attrs.get(""));
System.out.println("Lockout policy for " + attrs.get("distinguishedName").get());
System.out.println("Duration: " + attrs.get("lockoutDuration").get());
System.out.println("Threshold: " + attrs.get("lockoutThreshold").get());
long lockoutDuration = Long.parseLong(attrs.get("lockoutDuration").get().toString());
//Create the search controls
SearchControls searchCtls = new SearchControls();
//Specify the attributes to return
String returnedAtts[]={"sn","givenName","mail","lockoutTime"};
searchCtls.setReturningAttributes(returnedAtts);
//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//Create the correct LDAP search filter
//Win32 file time is based from 1/1/1601
//Java date/time is based from 1/1/1970
/*GregorianCalendar Win32Epoch = new GregorianCalendar(1601,Calendar.JANUARY,1);
GregorianCalendar Today = new GregorianCalendar();
long Win32Date = Win32Epoch.getTimeInMillis();
long TodaysDate = Today.getTimeInMillis();
long TimeSinceWin32Epoch = TodaysDate - Win32Date;
long lockoutDate = (TimeSinceWin32Epoch * 10000) + lockoutDuration;
System.out.println("Lockout (Long): " + lockoutDate);*/
//System.out.println("Lockout (Date): " + DisplayWin32Date(lockoutDate));
//String searchFilter = "(&(objectClass=user)(lockoutTime>=" + lockoutDate + "))";
String searchFilter = "(objectclass=user)";
//Specify the Base for the search
String searchBase = "dc=globalv,dc=com";
//initialize counter to total the results
int totalResults = 0;
//Search for objects using the filter
NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
//Loop through the search results
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult)answer.next();
totalResults++;
System.out.println(">>>" + sr.getName());
// Print out some of the attributes, catch the exception if the attributes have no values
attrs = sr.getAttributes();
if (attrs != null) {
try {
System.out.println(" name: " + attrs.get("givenName").get() + " " + attrs.get("sn").get());
System.out.println(" mail: " + attrs.get("mail").get());
System.out.println(" locked: " + attrs.get("lockoutTime").get().toString());
//System.out.println(" locked: " + DisplayWin32Date(attrs.get("lockoutTime").get().toString()));
catch (NullPointerException e) {
System.err.println("Problem listing attributes: " + e);
// System.out.println("Total results: " + totalResults);
ctx.close();
catch (NamingException e) {
System.err.println("Problem searching directory: " + e);
import java.util.Hashtable;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import javax.naming.*;
import java.util.*;
import java.util.Calendar.*;
import java.text.*;
public class GSSAPI {
* @param args
public static void main(String[] args) {
Hashtable env = new Hashtable();
String adminName = "[email protected]";//"[email protected]";
String adminPassword = "Password12";
String ldapURL = "ldap://172.20.55.97:389/";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"GSSAPI");
//env.put(Context.SECURITY_PRINCIPAL,adminName);
//env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//env.put("javax.security.sasl.server.authentication","true");
//connect to my domain controller
env.put(Context.PROVIDER_URL,ldapURL);
try {
//Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
//lets get the domain lockout duration policy
Attributes attrs = ctx.getAttributes("dc=globalv,dc=com");
//System.out.println("test arttr"+attrs.get(""));
System.out.println("Lockout policy for " + attrs.get("distinguishedName").get());
System.out.println("Duration: " + attrs.get("lockoutDuration").get());
System.out.println("Threshold: " + attrs.get("lockoutThreshold").get());
long lockoutDuration = Long.parseLong(attrs.get("lockoutDuration").get().toString());
//Create the search controls
SearchControls searchCtls = new SearchControls();
//Specify the attributes to return
String returnedAtts[]={"sn","givenName","mail","lockoutTime"};
searchCtls.setReturningAttributes(returnedAtts);
//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//Create the correct LDAP search filter
//Win32 file time is based from 1/1/1601
//Java date/time is based from 1/1/1970
/*GregorianCalendar Win32Epoch = new GregorianCalendar(1601,Calendar.JANUARY,1);
GregorianCalendar Today = new GregorianCalendar();
long Win32Date = Win32Epoch.getTimeInMillis();
long TodaysDate = Today.getTimeInMillis();
long TimeSinceWin32Epoch = TodaysDate - Win32Date;
long lockoutDate = (TimeSinceWin32Epoch * 10000) + lockoutDuration;
System.out.println("Lockout (Long): " + lockoutDate);*/
//System.out.println("Lockout (Date): " + DisplayWin32Date(lockoutDate));
//String searchFilter = "(&(objectClass=user)(lockoutTime>=" + lockoutDate + "))";
String searchFilter = "(objectclass=user)";
//Specify the Base for the search
String searchBase = "dc=globalv,dc=com";
//initialize counter to total the results
int totalResults = 0;
//Search for objects using the filter
NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
//Loop through the search results
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult)answer.next();
totalResults++;
System.out.println(">>>" + sr.getName());
// Print out some of the attributes, catch the exception if the attributes have no values
attrs = sr.getAttributes();
if (attrs != null) {
try {
System.out.println(" name: " + attrs.get("givenName").get() + " " + attrs.get("sn").get());
System.out.println(" mail: " + attrs.get("mail").get());
System.out.println(" locked: " + attrs.get("lockoutTime").get().toString());
//System.out.println(" locked: " + DisplayWin32Date(attrs.get("lockoutTime").get().toString()));
catch (NullPointerException e) {
System.err.println("Problem listing attributes: " + e);
// System.out.println("Total results: " + totalResults);
ctx.close();
catch (NamingException e) {
System.err.println("Problem searching directory: " + e);
} -
Hello,
We've had SPnego integrated authentication for Windows working with our EP for sometime.
Our company is moving to W2k8 domain and dc's (kdc's) for this question.
When one of our kdc functional servers has been replaced, it appears that the SPNego authentication function has started to fail upon restart of the Java\EP system.
Can anyone provide any info as to what might need to change for the continued use of the SPNego authentication against a W2k8 kdc?
Upon pointing the java\ep system back to a w2k3 kdc the implementation continues to work. So it looks to be windows version related.
Appreciate any help. Not seeing much from SAP areas possibly related to this?
RickHi,
>the Windows 2008 R2 server does not support DES encryption by default. So you have to enable it manually
This workaround works but is not secure : DES has been abandonned for default because it has been conpromised.
The real solution is to use the new SAP SPNEGO/Kerberos implementation which is able to use RC4 or AES.
If you cannot because of an unsufficient relaase or SP level, you have to do like we had to do in my company : buy a third party product which is able to use RC4 even for Netweaver 7.0 J2EE.
The security team has forbidden the use of DES in my company...
Regards,
Olivier -
OD, Kerberos, SPNEGO and Single Sign-On
I have been asked to identify ways to improve a company intranet, the entire network is Mac OS X for both clients and servers. The first thing I though of was using Kerberos for Single Sign-on functionality. Is anyone familiar with any issues surrounding setting this up in an all OS X environment. The Intranet hosts a number of web applications that would need to be converted to use Kerberos authentication and I just wanted to know if anyone is aware of any issues with the Apache mod_spnego or Safari 2.x's support for SPNEGO that could make things difficult. Also, I'm coming up blank for all my searches for any implementation instructions that might be out there so if anyone knows of any implementation descriptions that could be really helpful.
Thanks,
JamesHi,
the best thing would be the mapping, I thought it would work either the SSO was activated or not. I thought that once the system can't match the user with SSO it would try with the mapped user.
The problem if I am not wrong is that the index_service user can't be created in R/3 side, the name is too long. I guess you'll have to find another workaround.
Gregori Coll Ingles. -
Hi,
just to make sure: when the windows 2003 domain is MYDOMAIN and not MYDOMAIN.COM or anything with a dot in it (so users logon via MYDOMAIN\username), but the FQDN of the J2EE server is j2eehost.mydomain.com, then MYDOMAIN should be used to create the keytab file, instead of MYDOMAIN.COM, correct?
Thus host/j2eehost.mydomain.com@MYDOMAIN instead of host/[email protected] is the service principal name?Hi Yonko,
thanks again. Yes I understand why you would assume that there would be a MYDOMAIN.COM domain but it isn't as far as I know (result of upgrades all the way back from NT4).
I actually forgot to write that the windows logon dialog shows DOMAIN, but the FQDN is AMUCHBIGGERDOMAIN.COM. For example, the logon is COMPANYNAME\username, but the FQDN of all servers (all domain memebers) are <i>host.globalcompanyname.com</i>
interesting enough, we cannot logon using [email protected]
None the less, I'll double check using TweakUI.
Cheers
Marcel -
Help-kerberos works with spnego keytab file but not in netbeans and Metro
Hi,
Appreciate if someone can shed some light on this problem and guide on what else am I missing.
I'm trying to call .NET based WCF webservice (MS Dynamics CRM - OrganizationSvc) from a java client. Started looking at Metro framework for interoperability. I was able to generate all the proxy classes and was able to write the code to invoke web service. However the challenge was using Kerberos based authentication and related setup.
I primarily followed the link below which was very helpful but had to dig more to get more specific details.
http://blogs.sun.com/enterprisetechtips/entry/building_kerberos_based_secure_services
Tried to follow netbeans route and hit some roadblocks in verifying the setup (krb5.conf & login.conf & wsit-client.xml). So, came across SPNEGO and used their examples, made changes accordingly and after experimenting with various configuration settings(krb5.conf and login.conf), finallyI was able to run HelloKDC & HelloKeytab files successfully.
krb5.conf_
[libdefaults]
default_realm = NA.CONVERGYS.COM
[realms]
NA.CONVERGYS.COM = {
kdc = CDCWW13.na.convergys.com
admin_server = CDCWW13.na.convergys.com
[domain_realm]
.na.convergys.com = NA.CONVERGYS.COM
login.conf_
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="C:/WINDOWS/orldwv705_feb03.keytab"
doNotPrompt=false
storeKey=true
principal="HOST/ORLDWV705.na.convergys.com"
debug=true;
C:\spnego-r7>klist -k C:\WINDOWS\orldwv705_feb03.keytab
Key tab: C:\WINDOWS\orldwv705_feb03.keytab, 1 entry found.
[1] Service principal: HOST/[email protected]
KVNO: 7
With these settings, I was able to successfully make the call & Hello Keytab was able to get the Ticket and authenticate.
http://spnego.sourceforge.net/index.html
http://spnego.sourceforge.net/client_keytab.html
http://spnego.sourceforge.net/troubleshoot_hellokeytab.html
However, when I run the example in Netbeans with the setup mentioned in the link below, I run into following exception...
http://metro.java.net/guide/Developing_with_NetBeans.html#wsit_example_with_nb-creating_wsit_client
http://metro.java.net/guide/_Configuring_Kerberos_for_Glassfish_and_Tomcat.html
1) noticed that sc:KerberosConfig element in wsit-client.xml does not get updated automatically in netbeans ide, so manually edited to put the entries.
2) also followed the setup required in glassfish domain.xml & login.conf xml.
3) also noticed that netbeans setup requires us to use C:\Windows\krb5.ini file which is nothing but krb5.conf file referred elsewhere.)
wsit-client.xml_
<wsp:Policy wsu:Id="ClientKerberosPolicy"
xmlns:sc="http://schemas.sun.com/2006/03/wss/client"
xmlns:wspp="http://java.sun.com/xml/ns/wsit/policy"
xmlns:scc="http://schemas.sun.com/ws/2006/05/sc/client"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:ExactlyOne>
<wsp:All>
<sc:KerberosConfig wspp:visibility="private"
loginModule="KerberosClient"
servicePrincipal="HOST/ORLDWV705.na.convergys.com"
credentialDelegation="true" />
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
ERROR
INFO: WSP5018: Loaded WSIT configuration from file: file:/C:/Documents%20and%20Settings/rchoppal/My%20Documents/NetBeansProjects/TestOrgSvc/build/web/WEB-INF/classes/META-INF/wsit-client.xml.
WARNING: [failed to localize] WSP_0075_PROBLEMATIC_ASSERTION_STATE({http://schemas.microsoft.com/xrm/2011/Contracts/Services}AuthenticationPolicy, UNKNOWN)
WARNING: [failed to localize] WSP_0019_SUBOPTIMAL_ALTERNATIVE_SELECTED(PARTIALLY_SUPPORTED)
INFO: >>>KinitOptions cache name is C:\Documents and Settings\rchoppal\krb5cc_rchoppal
INFO: >>> KrbCreds found the default ticket granting ticket in credential cache.
SEVERE: WSITPVD0050: Error while Securing Request Message.
com.sun.xml.wss.XWSSecurityException: Unexpected Exception in Kerberos login - unable to continue
at com.sun.xml.ws.security.impl.kerberos.KerberosLogin.login(KerberosLogin.java:94)
at com.sun.xml.wss.impl.misc.WSITProviderSecurityEnvironment.doKerberosLogin(WSITProviderSecurityEnvironment.java:3049)
at com.sun.xml.wss.provider.wsit.WSITClientAuthContext.populateKerberosContext(WSITClientAuthContext.java:911)
at com.sun.xml.wss.provider.wsit.WSITClientAuthContext.secureRequest(WSITClientAuthContext.java:318)
at com.sun.xml.wss.provider.wsit.WSITClientAuthContext.secureRequest(WSITClientAuthContext.java:291)
at com.sun.enterprise.security.webservices.ClientSecurityPipe.process(ClientSecurityPipe.java:158)
Caused by: javax.security.auth.login.LoginException: java.lang.NullPointerException
at sun.security.krb5.Credentials.acquireDefaultCreds(Credentials.java:451) (i tried to search open source code, but this line did'nt match exactly)
at sun.security.krb5.Credentials.acquireTGTFromCache(Credentials.java:272)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:589)
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:542)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at com.sun.xml.ws.security.impl.kerberos.KerberosLogin.login(KerberosLogin.java:85)
SEVERE: SEC2004: Container-auth: wss: Error securing request
javax.xml.ws.WebServiceException: WSITPVD0050: Error while Securing Request Message.
at com.sun.xml.wss.provider.wsit.WSITClientAuthContext.secureRequest(WSITClientAuthContext.java:299)
at com.sun.enterprise.security.webservices.ClientSecurityPipe.process(ClientSecurityPipe.java:158)
Caused by: javax.xml.ws.soap.SOAPFaultException: Unexpected Exception in Kerberos login - unable to continue
at com.sun.xml.wss.provider.wsit.WSITAuthContextBase.getSOAPFaultException(WSITAuthContextBase.java:1617)
at com.sun.xml.wss.provider.wsit.WSITAuthContextBase.getSOAPFaultException(WSITAuthContextBase.java:1633)
... 42 more
WARNING: StandardWrapperValve[TestOrgSvcServlet]: PWC1406: Servlet.service() for servlet TestOrgSvcServlet threw exception
javax.xml.ws.WebServiceException: Cannot secure request for {http://schemas.microsoft.com/xrm/2011/Contracts}CustomBinding_IOrganizationService
at com.sun.enterprise.security.webservices.ClientSecurityPipe.process(ClientSecurityPipe.java:165)
Caused by: javax.xml.ws.WebServiceException: WSITPVD0050: Error while Securing Request Message.
at com.sun.xml.wss.provider.wsit.WSITClientAuthContext.secureRequest(WSITClientAuthContext.java:299)
at com.sun.enterprise.security.webservices.ClientSecurityPipe.process(ClientSecurityPipe.java:158)
... 40 more
Caused by: javax.xml.ws.soap.SOAPFaultException: Unexpected Exception in Kerberos login - unable to continue
at com.sun.xml.wss.provider.wsit.WSITAuthContextBase.getSOAPFaultException(WSITAuthContextBase.java:1617)
at com.sun.xml.wss.provider.wsit.WSITAuthContextBase.getSOAPFaultException(WSITAuthContextBase.java:1633)
... 42 more
Edited by: user6748004 on Feb 3, 2011 5:36 PM
Edited by: user6748004 on Feb 3, 2011 5:38 PMHi Gasha,
The only change I did after this, was to try and use 'KerberosServer' configuration from the wsit-client.xml. Atleast, this enabled the glassfish application to load the configuration related to keytab etc, and use it to communicate with the WCF service for negotiation.
<sc:KerberosConfig wspp:visibility="private"
loginModule="KerberosServer"
servicePrincipal="HOST/ORLDWV705.na.convergys.com"
credentialDelegation="true" />
login.conf has
KerberosServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="C:/WINDOWS/orldwv705_feb03.keytab"
doNotPrompt=false
storeKey=true
principal="HOST/ORLDWV705.na.convergys.com"
debug=true;
fyi.. Used the following way to create the keytab
Keytab was created using below instructions
ktpass -princ HOST/[email protected]
-mapUser [email protected]
-mapOp set
-pass *
-crypto DES-CBC-MD5
-pType KRB5_NT_PRINCIPAL
-out orldwv705.keytab
Targeting domain controller: CDCWW13.na.convergys.com
Successfully mapped HOST/ORLDWV705.na.convergys.com to svcMSCRMDev.
Key created.
Output keytab to orldwv705.keytab:
Keytab version: 0x502
keysize 75 HOST/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 8 etype 0x3 (DES-CBC-MD5) keylength 8 (0x0bc27ca83891dc2a)
Also realised that we need to add 'HTTP/ORLDWV705.na.convergys.com' & 'http/ORLDWV705.na.convergys.com' using set SPN commands on the AD of the server where CRM is installed.
With these changes, the negotiate authentication seems to have happened using the Kerberos token from the keytab, but later ran into an error for which I was not able to get any clue to go forward. Someone in another post about this error suggested that it worked once they changed principal names, but when I tried I did'nt get any success.
This is where I'm struck now. What I don't know is if there is another setup from which we can try a similar interoperability example for ex.. weblogic 10.1 & eclipse which is more close to our real environment.
SEVERE: SEC2004: Container-auth: wss: Error securing request
java.lang.IllegalArgumentException: Missing argument
at javax.crypto.spec.SecretKeySpec.<init>(DashoA13*..)
at com.sun.xml.ws.security.impl.kerberos.KerberosContext.getSecretKey(KerberosContext.java:91)
at com.sun.xml.wss.impl.filter.SignatureFilter.process(SignatureFilter.java:525)
Edited by: user6748004 on Apr 8, 2011 10:39 AM -
Robert,
In a previous post you said,
"I've said this elsewhere on this forum, but in case you missed it, in certain
cases you might be forced to implement a servlet filter rather than use the SSPIs.
My case was using identity assertion with SPNEGO where you need to send back a
response to the browser which in turn sends back a token to the server."
Could you please explain how do we do SSPI for SPNEGO? I have a requirement where
we need to pass the credentials from WL portal to IIS server to access content
on IIS. Right now, as a temporary solution, we are doing https://uid:[email protected]
I am new to security and JAAS. If you could please give me pointers to accomplish
this in a cleaner way, I would really appreciate it.
Thanks,
AdamRobert,
Thats really awesome. Can we get this discussion offline from here? Could you
please e-mail me at [email protected]?
Thanks,
Adam
Robert Greig <[email protected]> wrote:
Adam Gilchrist wrote:
Robert,
In a previous post you said,
"I've said this elsewhere on this forum, but in case you missed it,in certain
cases you might be forced to implement a servlet filter rather thanuse the SSPIs.
My case was using identity assertion with SPNEGO where you need tosend back a
response to the browser which in turn sends back a token to the server."
Could you please explain how do we do SSPI for SPNEGO? I have a requirementwhere
we need to pass the credentials from WL portal to IIS server to accesscontent
on IIS. Right now, as a temporary solution, we are doing https://uid:[email protected]@mydomain.com.
First, here's how to do it in the "standard" web browser case (IE client
talking to WLS).
1) Don't use the WLS SSPIs. You don't have access to the http response
therefore it is not easy (perhaps not possible although maybe there are
evil hacks that I haven't come up with!).
2) Download the SPNEGO RFC. You'll need an ASN parser (unless you want
to do the encoding manually - I don't recommend that unless you're
familiar with ASN). Create an SPNEGO grammar your parser can understand
and generate java code from the grammar. I used the cryptix parser (open
source) but note that it had some bugs I had to fix first.
3) Write a servlet filter. It should send back 403 responses in order
to
get the base 64 encoded SPNEGO token (see the RFC for details). When
you
have a token, get the GSS initial context token from it and use the
GSSAPI to validate it. Then send back the appropriate response, having
put the appropriate details into the session so you don't have to
perform this for every request!
Second - I plan on open sourcing what I have done and writing an article
on it. Maybe I'm just sad and lonely but I certainly found it
interesting to do (having never done anything in this area before) and
I
found that it was not an area that is either mature or well documented.
This might be of some use to you. I am currently trying to get
permission from my employer to do this (I work for an investment bank
hence this is not entirely straightforward but I do now have agreement
in principle).
Third - to cover your case. You need to create an SPNEGO initial context
token (see the spec for details). This should be quite easy once you
have the ASN parser (just use the GSSAPI to get the underlying context
token). You will have to implement SPNEGO from a client-side perspective
however that should be easy (expect a 403 response from the server, then
put in the base 64 encoded SPNEGO token into a particular request header).
I am new to security and JAAS. If you could please give me pointersto accomplish
this in a cleaner way, I would really appreciate it.Do you need to use SPNEGO here? If you can write an ASP page to service
all requests then so long as you are happy using HTTPS you could put
the
username into a POST parameter. Or must you directly access the content
without going through an intermediary page? If direct username isn't
possible then you could even just ignore SPNEGO and put in the base 64
intial context token (which you can process using the Windows SSPI APIs).
I hope this is of some use to you.
Robert -
Hello,
We wanted to have desktop single sign on by using SPNEgo and we have configured everything as said in SAP Help document and we could not achieve single sign on. Not sure where we are going wrong.
When we run the Diagtool, we are getting the error "Cannot login user" and " Error sending krb5 token".
Need your inputs and suggestions and corrections in this. Below are the details.
<b>Landscape information:</b>
Active Directory Windows 2003 SP1
Active Directory Domain ED.ET.COM
Portal EP 7.0 (NW2004s SPS8)
Portal OS AIX 5.3
Database DB2 UDB
Portal/J2EE Engine domain comp.com
JDK IBM JDK
Client / Workstation Windows XP SP1 (Domain ED.ET.COM)
Portal sysid B01
<b>Steps</b>
1. Created the User j2ee-b01 in the active directory, with password never expires option
2. Created keytab files using windows ktpass.
<b>ktpass -princ host/[email protected] -pass password out g023us08.keytab -mapUser j2ee-b01 +DesOnly /crypto DES-CBC-MD5 /ptype KRB5_NT_PRINCIPAL
ktpass princ HTTP/[email protected] pass password out g023us08.keytab -in g023us08.keytab -mapUser j2ee-b01 +DesOnly /crypto DES-CBC-MD5 /ptype KRB5_NT_PRINCIPAL</b>
3. setspn A HTTP/g023us08.comp.com j2ee-b01
4. Placed the g023us08.keytab and krb5.conf under /usr/sap/B01/certfiles.
5.Jave parameters are added in the configtool
6. Resolution mode = <b>simple</b> and in the UME added the attribute "<b>krb5principalname</b>" and physicalAtrrbibute "<b>userprincipalname</b>".
7. Configured of login to use SPNego Login Module.
8.The maintained parameters for SPNegoLoginModule are
com.sap.spnego.jgss.name = [email protected]
com.sap.spnego.uid.resolution.mode = simple
com.sap.spnego.uid.resolution.attr = krb5principalname
<b>Krb5.conf contents.</b>
[domain_realm]
.comp.com = ED.ET.COM
[libdefaults]
default_keytab_name = /usr/sap/B01/certfiles/g023us08.keytab
default_realm = ED.ET.COM
dns_lookup_kdc = true
default_tgs_enctypes=des-cbc-md5;des-cbc-crc
default_tkt_enctypes=des-cbc-md5;des-cbc-crc
[realms]
ED.ET.COM = {
admin_server = g1432dc01.ed.et.com
kdc = g1432dc01.ed.et.com
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
Thanks in Advance.
Regards,
Praveen<b></b><b></b>Hi Praveen,
I did a compare of your configuration with mine.
My ktpass commands are same as yours, but I did not use the mapuser option in the first one. There is no dash in front of it too.
Ex :
ktpass -princ host/[email protected] -pass password -out c:\keytab_p1d +DesOnly /crypto DES-CBC-MD5 /ptype KRB5_NT_PRINCIPAL
ktpass -princ HTTP/[email protected] -pass password -out c:\keytab_p1d -in c:\keytab_p1d mapUser kerb_p1d +DesOnly /crypto DES-CBC-MD5 /ptype KRB5_NT_PRINCIPAL
In my Krb5.conf, I put the ip of the admin_server and kdc
instead of pc name, but it should be valid.
To verify that your datasource changes are good, check in the portal useradmin if the new attribute krb5principalname shows up in the "customized information" tab.
You got an error at
com.sap.spnego.jgss.name
It should be :
com.sap.spnego.jgss.name = HTTP/[email protected]
Also, you did not give your other login modules config, like krb5loginmodule and mappingmodule.
Please note that all the config is case sensitive.
Brad -
SPNego authentication not working
Hi,
We are trying to configure SPNego and we are facing issues. We had done the configuration in another environment and it worked fine.
I have checked the configuration at AD end and portal end multiple
times and everything looks to be fine. Following is the error message coming in the logs.
[JGSS_DBG_CTX] Client time Sat Feb 03 13:09:32 GMT 2007 too skewed
13:04:05:373 Error Guest ~on_Thread[impl:3]_1 System.err org.ietf.jgss.GSSException, major code: 10, minor code: 37
major string: Defective token
minor string: Client time 03 February 2007 at 13:09:32 too skewed
13:04:05:373 Error Guest ~on_Thread[impl:3]_1 System.err at com.ibm.security.jgss.i18n.I18NException.throwGSSException(I18NException.java:5)
at com.ibm.security.jgss.mech.krb5.k.a(k.java:896)
at com.ibm.security.jgss.mech.krb5.k.a(k.java:6)
at com.ibm.security.jgss.mech.krb5.k.b(k.java:231)
at com.ibm.security.jgss.mech.krb5.k.acceptSecContext(k.java:1010)
at com.ibm.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:30)
at com.ibm.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:370)
at com.sap.security.core.server.jaas.SPNegoLoginModule.doHandshake(SPNegoLoginModule.java:614)
at com.sap.security.core.server.jaas.SPNegoLoginModule.login(SPNegoLoginModule.java:322)
at com.sap.engine.services.security.login.LoginModuleLoggingWrapperImpl.login(LoginModuleLoggingWrapperImpl.java:150)
at com.sap.engine.services.security.login.ModulesProcessAction.run(ModulesProcessAction.java:69)
at java.security.AccessController.doPrivileged(AccessController.java:242)
at com.sap.engine.services.security.login.FastLoginContext.login(FastLoginContext.java:172)
at com.sap.engine.system.SystemLoginModule.login(SystemLoginModule.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
at java.lang.reflect.Method.invoke(Method.java:391)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:699)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:151)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:634)
at java.security.AccessController.doPrivileged(AccessController.java:242)
at javax.security.auth.login.LoginContext.invokeModule(LoginContext.java:631)
at javax.security.auth.login.LoginContext.login(LoginContext.java:557)
at com.sap.security.core.logon.imp.SAPJ2EEAuthenticator.getLoggedInUser(SAPJ2EEAuthenticator.java:142)
at com.sapportals.portal.prt.service.authenticationservice.AuthenticationService.getLoggedInUser(AuthenticationService.java:303)
at com.sapportals.portal.prt.connection.UMHandler.handleUM(UMHandler.java:96)
at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:186)
at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:522)
at java.security.AccessController.doPrivileged(AccessController.java:242)
at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
at com.sap.portal.navigation.Gateway.service(Gateway.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:401)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:365)
at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:944)
at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:266)
at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:160)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(AccessController.java:215)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
Any help is highly appreciated.
Many Thanks,
ChandraHi,
per this part of the exception:
minor string: Client time 03 February 2007 at 13:09:32 too skewed
there seems to be a problem with the time syncronizations between the domain controller, the client system and the SAP NetWeaver system. Check that all system clocks are syncronized and have the correct time zone settings.
Hope this helps,
Yonko -
SPNego - J2ee did not send request for authentication
Hi All,
I have configured SPNego and completed all setup as per documentation. When I use the browser to access the portal, it is prompting for user id and password. If we manually enter the id and password on AD, it works fine. Somehow not able connect to j2ee without prompting for id and password.
To troubleshoot this, traced the http traffic using winshark and found that j2ee engine did not send any request for kerberos authentication.
Is there way to check on the server side to make sure spnego is configured properly and server is able to send kerberos authentication ?
Appreciate your help !
Thanks!Login to your Visual Admin, then go to -->Security Provider -->com.sun.security.jgss.accept -->Krb5LoginModule
Add a Parameter isInitiator and Value false. Save it and take a bounce of J2EE.
This should solve your login page problem Otherwise paste the default trace.
You can also read my BLOG : Common SPNEGO Implementation Issues
Reward points if my suggestion was helpful - -
Web Diagtool error while testing for SPNEGO
Dear Experts,
I have configured SPNEGO and got some trace from web-daigtool. While connecting through portal, I get UNKNOWN ERROR in the login page. I have checked the j2ee user password and its fine..The trace is as below,
GSS Context created.
12:23:45:618 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 System.out Entered Krb5Context.acceptSecContext with state=STATE_NEW
12:23:45:618 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 System.out >>> EType: sun.security.krb5.internal.crypto.DesCbcMd5EType
12:23:45:620 Error J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~rity.core.server.jaas.SPNegoLoginModule CreateContext failed: GSSException: Failure unspecified at GSS-API level (Mechanism level: Integrity check on decrypted field failed (31))
[EXCEPTION]
h1 GSSException: Failure unspecified at GSS-API level (Mechanism level: Integrity check on decrypted field failed (31))
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:734)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:300)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:246)
at com.sap.security.core.server.jaas.SPNegoLoginModule.doHandshake(SPNegoLoginModule.java:612)
at com.sap.security.core.server.jaas.SPNegoLoginModule.login(SPNegoLoginModule.java:321)
at com.sap.engine.services.security.login.LoginModuleLoggingWrapperImpl.login(LoginModuleLoggingWrapperImpl.java:150)
at com.sap.engine.services.security.login.ModulesProcessAction.run(ModulesProcessAction.java:69)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.services.security.login.FastLoginContext.login(FastLoginContext.java:172)
at com.sap.engine.system.SystemLoginModule.login(SystemLoginModule.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:675)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:129)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:610)
at java.security.AccessController.doPrivileged(Native Method)
12:23:45:623 Error J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~rity.core.server.jaas.SPNegoLoginModule Error during handshake (has already been reported). Authentication failed.
12:23:45:623 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.engine.services.security Login module com.sap.security.core.server.jaas.SPNegoLoginModule from authentication stack spnego does not authenticate the caller.
12:23:45:623 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~m.sap.security.core.server.jaas.login() Entering method
12:23:45:623 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas No authenticated user found.
12:23:45:623 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with false
12:23:45:624 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.engine.services.security No user name provided.
12:23:45:624 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~m.sap.security.core.server.jaas.login() Entering method
12:23:45:624 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas No authenticated user found.
12:23:45:624 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with false
12:23:45:624 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.engine.services.security Unsuccessful login: no login module succeeded. The size of the used authentication stack spnego is 5.
12:23:45:625 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.engine.services.security Exception : No login module succeeded.
java.lang.Exception
at com.sap.exception.BaseExceptionInfo.traceAutomatically(BaseExceptionInfo.java:1141)
at com.sap.exception.BaseExceptionInfo.<init>(BaseExceptionInfo.java:253)
at com.sap.engine.services.security.exceptions.BaseLoginException.<init>(BaseLoginException.java:134)
at com.sap.engine.services.security.login.ModulesProcessAction.run(ModulesProcessAction.java:190)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.services.security.login.FastLoginContext.login(FastLoginContext.java:172)
at com.sap.engine.system.SystemLoginModule.login(SystemLoginModule.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:675)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:129)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:610)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokeModule(LoginContext.java:607)
at javax.security.auth.login.LoginContext.login(LoginContext.java:534)
at com.sap.security.core.logon.imp.SAPJ2EEAuthenticator.getLoggedInUser(SAPJ2EEAuthenticator.java:131)
at com.sapportals.portal.prt.service.authenticationservice.AuthenticationService.getLoggedInUser(AuthenticationService.java:303)
at com.sapportals.portal.prt.connection.UMHandler.handleUM(UMHandler.java:96)
at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:186)
at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:522)
at java.security.AccessController.doPrivileged(Native Method)
at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
at com.sap.portal.navigation.Gateway.service(Gateway.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)
at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)
at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)
at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)
at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
..more error below12:23:45:626 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~m.sap.security.core.server.jaas.abort() Entering method
12:23:45:626 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Internal Login Module data has been reset.
12:23:45:626 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with true
12:23:45:626 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~m.sap.security.core.server.jaas.abort() Entering method
12:23:45:626 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with true
12:23:45:627 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~m.sap.security.core.server.jaas.abort() Entering method
12:23:45:627 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with true
12:23:45:627 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~][md=getUserAccountByLogonId][cl=19874] Entering method
12:23:45:627 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~][md=getUserAccountByLogonId][cl=19874] Found uniqueID for logonId J2EE_GUEST
12:23:45:627 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~][md=getUserAccountByLogonId][cl=19874] Exiting method with userAccount from cache
12:23:45:628 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~.security.core.server.jaas.initialize() Entering method with (Subject:
, javax.security.auth.login.LoginContext$SecureCallbackHandler@6f6b52b2)
12:23:45:628 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas The options of EvaluateTicketLoginModule in [spnego] authentication stack are: [{ume.configuration.active=true, trustediss1=OU=J2EE,CN=ABC, trustedsys1=ABC,555, trusteddn1=OU=J2EE,CN=ABC}].
12:23:45:628 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~s.constructor(Map, Properties, boolean) Entering method with ({System-ID=ABC, sap.security.auth.configuration.name=spnego, sap.security.auth.context.object=Security Context : session (0) for J2EE_GUEST created at Wed Mar 11 12:13:58 AST 2009}, <null>)
12:23:45:628 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas got [ume.configuration.active]: [true]
12:23:45:629 Warning J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas no authscheme found that has auth template spnego
12:23:45:629 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with [Ljava.lang.Object;@6f025d43
12:23:45:629 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~ity.core.server.jaas.getMergedOptions() Entering method
12:23:45:629 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with [Ljava.lang.Object;@43912a5
12:23:45:629 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas The options of EvaluateTicketLoginModule in [spnego] authentication stack after merge with UME properties are: [{ume.configuration.active=true, trustediss1=OU=J2EE,CN=ABC, system=ABC, client=555, j_authscheme=default, inclcert=0, trusteddn1=OU=J2EE,CN=ABC, ume.logon.httponlycookie=TRUE, alias=SAPLogonTicketKeypair, ume.logon.security.enforce_secure_cookie=FALSE, validity=8, keystore=TicketKeystore, trustedsys1=ABC,555, password=}].
12:23:45:629 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas The options of EvaluateTicketLoginModule in [spnego] authentication stack after adding the default values are: [{ume.configuration.active=true, trustediss1=OU=J2EE,CN=ABC, system=ABC, client=555, j_authscheme=default, inclcert=0, trusteddn1=OU=J2EE,CN=ABC, ume.logon.httponlycookie=TRUE, alias=SAPLogonTicketKeypair, sap.security.auth.configuration.name=spnego, ume.logon.security.enforce_secure_cookie=FALSE, validity=8, keystore=TicketKeystore, trustedsys1=ABC,555, password=}].
12:23:45:630 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method
12:23:45:630 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~.security.core.server.jaas.initialize() Entering method with (Subject:
, javax.security.auth.login.LoginContext$SecureCallbackHandler@6f6b52b2, {System-ID=ABC, sap.security.auth.configuration.name=spnego, sap.security.auth.context.object=Security Context : session (0) for J2EE_GUEST created at Wed Mar 11 12:13:58 AST 2009}, {ume.configuration.active=true})
12:23:45:630 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas The options of CreateTicketLoginModule in [spnego] authentication stack are: [{ume.configuration.active=true}].
12:23:45:630 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~s.constructor(Map, Properties, boolean) Entering method with ({System-ID=ABC, sap.security.auth.configuration.name=spnego, sap.security.auth.context.object=Security Context : session (0) for J2EE_GUEST created at Wed Mar 11 12:13:58 AST 2009}, <null>)
12:23:45:630 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas got [ume.configuration.active]: [true]
12:23:45:631 Warning J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas no authscheme found that has auth template spnego
12:23:45:631 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with [Ljava.lang.Object;@3ef710cd
12:23:45:631 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~ity.core.server.jaas.getMergedOptions() Entering method
12:23:45:631 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method with [Ljava.lang.Object;@4e702306
12:23:45:631 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas The options of CreateTicketLoginModule in [spnego] authentication stack after merge with UME properties are: [{ume.configuration.active=true, system=ABC, client=555, j_authscheme=default, inclcert=0, ume.logon.httponlycookie=TRUE, alias=SAPLogonTicketKeypair, ume.logon.security.enforce_secure_cookie=FALSE, validity=8, keystore=TicketKeystore, password=}].
12:23:45:632 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas The options of CreateTicketLoginModule in [spnego] authentication stack after adding the default values are: [{ume.configuration.active=true, system=ABC, client=555, j_authscheme=default, inclcert=0, ume.logon.httponlycookie=TRUE, alias=SAPLogonTicketKeypair, sap.security.auth.configuration.name=spnego, ume.logon.security.enforce_secure_cookie=FALSE, validity=8, keystore=TicketKeystore, password=}].
12:23:45:632 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.server.jaas Exiting method
12:23:45:632 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~.security.core.server.jaas.initialize() Entering method with (Subject:
, javax.security.auth.login.LoginContext$SecureCallbackHandler@6f6b52b2, {System-ID=ABC, sap.security.auth.configuration.name=spnego, sap.security.auth.context.object=Security Context : session (0) for J2EE_GUEST created at Wed Mar 11 12:13:58 AST 2009}, {ume.configuration.active=true})
12:23:45:635 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.engine.services.security Unsuccessful login: no login module succeeded. The size of the used authentication stack spnego is 5.
12:23:45:637 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.engine.services.security Exception
: No login module succeeded.
java.lang.Exception
at com.sap.exception.BaseExceptionInfo.traceAutomatically(BaseExceptionInfo.java:1141)
at com.sap.exception.BaseExceptionInfo.<init>(BaseExceptionInfo.java:253)
at com.sap.engine.services.security.exceptions.BaseLoginException.<init>(BaseLoginException.java:134)
at com.sap.engine.services.security.login.ModulesProcessAction.run(ModulesProcessAction.java:190)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.services.security.login.FastLoginContext.login(FastLoginContext.java:172)
at com.sap.engine.system.SystemLoginModule.login(SystemLoginModule.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:675)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:129)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:610)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokeModule(LoginContext.java:607)
at javax.security.auth.login.LoginContext.login(LoginContext.java:534)
at com.sap.security.core.logon.imp.SAPJ2EEAuthenticator.logon(SAPJ2EEAuthenticator.java:848)
at com.sapportals.portal.prt.service.authenticationservice.AuthenticationService.login(AuthenticationService.java:367)
at com.sapportals.portal.prt.connection.UMHandler.handleUM(UMHandler.java:126)
at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:186)
at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:522)
at java.security.AccessController.doPrivileged(Native Method)
at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
12:23:45:637 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~m.sap.security.core.server.jaas.abort() Entering method
com.sap.security.core.server.jaas Exiting method with true
12:23:45:639 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~l.SecurityAudit][md=log(...)][cl=19874] ObjectID handed over is 'null'!
12:23:45:639 Warning J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 com.sap.security.core.util.SecurityAudit J2EE_GUEST | LOGIN.ERROR | null | | Login Method=[default], UserID=[null], IP Address=[10.150.162.205], Reason=[No login module succeeded.]
12:23:45:639 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~][md=getUserAccountByLogonId][cl=19874] Entering method
12:23:45:640 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~][md=getUserAccountByLogonId][cl=19874] Found uniqueID for logonId J2EE_GUEST
12:23:45:640 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~][md=getUserAccountByLogonId][cl=19874] Exiting method with userAccount from cache
12:23:45:646 Error J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~n.SAPMLogonLogic][md=doLogon][cl=22651] h1 doLogon failed
[EXCEPTION]
com.sap.security.core.logon.imp.UMELoginException
at com.sap.security.core.logon.imp.SAPJ2EEAuthenticator.logon(SAPJ2EEAuthenticator.java:943)
at com.sapportals.portal.prt.service.authenticationservice.AuthenticationService.login(AuthenticationService.java:367)
at com.sapportals.portal.prt.connection.UMHandler.handleUM(UMHandler.java:126)
at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:186)
at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:522)
at java.security.AccessController.doPrivileged(Native Method)
at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
at com.sap.portal.navigation.Gateway.service(Gateway.java:126)
12:23:45:647 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~rBean][md=ErrorBean(Message)][cl=19874] message UNKNOWN_ERROR
12:23:45:648 Error J2EE_GUEST SAPEngine_Application_Thread[impl:3]_0 ~.util.ResourceBean][md=print][cl=19874] Message ID (UNKNOWN_ERROR) not found in properties files-UNKNOWN_ERROR
[EXCEPTION]
java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key h1 UNKNOWN_ERROR
at java.util.ResourceBundle.getObject(ResourceBundle.java:325)
at java.util.ResourceBundle.getObject(ResourceBundle.java:322)
at java.util.ResourceBundle.getString(ResourceBundle.java:285)
at com.sap.security.core.util.ResourceBean.getString(ResourceBean.java:119)
at com.sap.security.core.util.ResourceBean.print(ResourceBean.java:133)
at sapportalsjspumLogonPage.subDoContent(_sapportalsjsp_umLogonPage.java:538)
at sapportalsjspumLogonPage.doContent(_sapportalsjsp_umLogonPage.java:67)
at sapportalsjspumLogonPage.service(_sapportalsjsp_umLogonPage.java:47)
at com.sapportals.portal.prt.core.broker.PortalComponentItemFacade.service
12:23:48:712 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_38 ~.security.core.server.jaas.initialize() Entering method with (Subject:
, javax.security.auth.login.LoginContext$SecureCallbackHandler@6038a47d)
12:23:48:712 Debug J2EE_GUEST SAPEngine_Application_Thread[impl:3]_38 com.sap.security.core.server.jaas The options of EvaluateTicketLoginModule in [spnego] authentication stack are: [{ume.configuration.active=true, trustediss1=OU=J2EE,CN=ABC, trustedsys1=ABC,555, trusteddn1=OU=J2EE,CN=ABC}].
12:23:48:712 Path J2EE_GUEST SAPEngine_Application_Thread[impl:3]_38 ~s.constructor(Map, Properties, boolean) Entering method with ({System-ID=ABC, sap.security.auth.configuration.name=spnego, sap.security.auth.context.object=Security Context : session (0) for J2EE_GUEST created at Wed Mar 11 12:13:58 AST 2009}, <null>)
12:23:48:712 Info J2EE_GUEST SAPEngine_Application_Thread[impl:3]_38 com.sap.security.core.server.jaas got [ume.configuration.active]: [true] -
Login as DOMAINUsername posible in SPNego?
Hi,
I just implemented SPNego and is working but when a user is not loged into the domain the user has to login typing in the authentication window the username like [email protected] and not like DOMAINUsername, do you know if this is posible? I´ve been told of an SPNego implementation that is working as DOMAINUsername but don´t know how to do it or even if it is possible.
Thanx in Advanced!
Kind Regards,
Gerardo JHi,
I just made a Test and it is working the way we are expecting, with standard installation of the SPNego we are able to login as DOMAIN/Username, maybe we made the tests with wrong usernames or maybe but less probable is working now cause we pointed to the SPNego and Portal to the ADS in port 3268 which can see all domains.
Also can somebody help me out on rewarding points cause I don´t see the radio buttons to select the points, has something changed in the Forums?
Kind Regards,
Gerardo J -
SPNego still allowing non Kerberos Logons
After exhaustive searches and attempts, I thought I had the SPNegoLoginModule installed. These are the steps that I have followed.
1. Created a service user in the user directory used by the KDC.
2. Created the keytab file and transferred it to the J2EE server.***Note that I have found that the directions in help.sap.com are different for NW2004 and NW2004s! It seems there is an additional step there. I am running EP6 SPS15 and using NW2004
3. Created krb5.conf
4. Added the 3 lines to the UME.
5. Configured the logon stacks. *** Note and warning, there is a difference between the instructions for NW2004 and NW2004s! Coming from an Environment that never had to deal with this step before, I admit that I was totally lost on my first attempts.
6. Configured ADS data source for Kerberos Authentication.
7. Configured IE for Kerberos Authentication.
I restarted the engine and I was able to log on to the Portal. Victory, NO!
I wanted to test so I undid step 7. I was STILL able to log in. SPNego is not working. Not finding any other docs, I went to the VA and changed the SAP-J2EE-Engine logon module to SPNegoLoginModule. DO NOT DO THIS! The engine comes up, SPNego is still not working and you can no longer get into the VA. I had to manually change the security settings in the configtool just to activate SAP* to undo the damage.
The only thing I can think of that is still letting me log in is that I use MSADS as my LDAP. In configuring the ADS for Kerberos I add the lines of code to the existing code that was used. Is this the correct way to do this?
Anyone see a step that I missed?Hello David.
I've made the same mistake:
I went to the VA and changed the SAP-J2EE-Engine logon module to SPNegoLoginModule.
So could you tell me, how can I log on to VA now?
Where can I activate SAP*?
I've set the value ume.superadmin.activated = true,
but I still cannot logon to VA.
And could you tell me where do I need to define my
SPNegoLoginModule for correct work of SPNego?
If you have configured SSO using SPNego and
have step by step manual for it, could you send it for me?
Best Regards!
Vitali
[email protected]
Message was edited by: Vitali Chasalau -
SPNego, Reverse Proxy?
We all know that we should be switching to SPNego and I am trying to set up a new portal with it now.
My question is, if we are to use SPNego now, how does that act as a reverse proxy? This is supposed to be replacing IISProxy, right?Hi David,
I guess is a little late... SPNego is not for reverse proxying.
It is used for authentication purpouses.
Kind Regards,
Gerardo J -
Hi Gurus,
We have a requirement, to have SSO between, user Microsoft Credentials and SAP Portal.
The Chalenge here is that the user name, in Microsoft credentials is different from the Portal user, so we need authenticate the user against ADS and then setup the SAP Logon Ticket with the Portal user ID.
We will be using the same ADS, for both SPNego and SAP Portal UME, but as we need a different ID for SAP Portal we will do an attribute Mapping for that porpoise.
For example
ADS User = 20 characters
Portal user= 8 characters
SAPLogon Ticket generated with 8 characters Portal user.
Thanks in Advanced.
RogelioHi Rogelio,
please have a look into SAP Library. There you will find detailed instructions how to <a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/43/4bd58c6c5e5f34e10000000a1553f6/frameset.htm">use Kerberos authentication for Single Sign-on with SAP NetWeaver Portal</a>. Contemplating your requirements (Kerberos Principal Name is different from portal user name), I suggest you pay special attention to sub section <a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/43/4bba9d9e5e5f6ce10000000a1553f6/frameset.htm">Configuring the UME</a> and <a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/43/4c363ac31e30f3e10000000a11466f/frameset.htm">Configuring the UME when Using ADS Data Sources for Kerberos</a>.
Best regards,
Martin
Maybe you are looking for
-
What do the numbers under the disc version 1.0 mean
I need to format my mac back to factory but only have the mac os x install disc. I found a set of the discs on ebay with identical information on the one disc that I have except the number under "version 1.0"; mine says Mac OS version 10.6.1 Disc ver
-
Adjusting Column After Splitting a Cell
Hello, I am new with Pages and am amazingly impressed with all that it does. Perhaps I am pushiing it a bit too far but when I split a cell into two cells I am not able to adjust the size of any of the two cells. Is this normal? Thanks in advance. Fa
-
BankingAppServlet.java crashes javac?!
When I try to compile BankingAppServlet.java in the banking tutorial, I get this: root@localhost dev]# echo $CLASSPATH /bea/wlserver6.1/samples/examples/tutorials/banking/deploy/ejb:/usr/java/jdk1.3.1_02/lib/tools.jar:/bea/wlserver6.1/lib/weblogic.ja
-
Hi, my client wants to have the conditions invisible for the users in a special MM-PO-doctype. Is there a way to realize this without modifying the system? Has anybody experience with this task? Please help. Thanks, Thomas
-
We have a video shot in "Anamaphoric" 16 x 9 and now we need to know how to create a DVD where the 16 x 9 screen fits fully on a 16 x 9 monitor. Is this possible with Standard Def video?