I'd say it wouldn't be too hard to remove the dependency on the DerValue class completely. Basically, you want to extract the KeyIdentifier Octet String from the DER-encoded extension value and then strip off the octet tag.
If I have some time later, I'll send a snippet of code.
--Sean
Davanum Srinivas wrote:
would you be able to compile a fresh version of xml-security from our cvs? if so, try replacing sun's DerValue with com.ibm.security.util.DerValue and see if that works, if it does, i am willing to patch the code using java reflection api to switch between the two.
thanks, -- dims
On Fri, 25 Jun 2004 14:43:56 +0200, Heiner Westphal <[EMAIL PROTECTED]> wrote:
I digged some more...
It seems sun's DerValue class is only used, if the xml signature keyinfo contains an <X509SKI> element (signatures without work).
This is what I get. I'm not sure if this is a legal keyinfo. If the combination of issuer/serial and ski is not ok, I can move the problem ownership to the sender :)
<KeyInfo> <X509Data> <X509IssuerSerial> <X509IssuerName> C=DE,O=Secret GmbH, OU=development,CN=TestSecret </X509IssuerName> <X509SerialNumber>7711026923132787338</X509SerialNumber> </X509IssuerSerial> <X509SKI>aTTp+EejjS30eFH+UObfuscaTeME=</X509SKI> </X509Data> </KeyInfo>
Regards,
Heiner
Heiner Westphal wrote:
Hello!
Im using xml-security java 1.1.0 on an AIX with IBM SDK 1.4.1.
In org.apache.xml.security.keys.content.x509.XMLX509SKI an object of class sun.security.util.DerValue is used, which should not be according to http://java.sun.com/products/jdk/faq/faq-sun-packages.html
When I'm trying to read a specific certificate I get: Exception in thread "main" java.lang.NoClassDefFoundError: sun/security/util/DerValue. This does not happen, if I use a selfsigned cert created with keytool and keyalg=DSA.
If anyone knows a quick workaround, please tell me.
P.S.: The calling code is attached, trace below. trace is (sorry, no line numbers, ... means org.apache.xml.security.):
Exception in thread "main" java.lang.NoClassDefFoundError: sun/security/util/DerValue at ...keys.content.x509.XMLX509SKI.getSKIBytesFromCert(Unknown Source) at ...keys.content.x509.XMLX509SKI.<init>(Unknown Source) at ...keys.keyresolver.implementations.X509SKIResolver. engineResolveX509Certificate(Unknown Source) at ...keys.keyresolver.KeyResolver.resolveX509Certificate(Unknown Source) at ...keys.KeyInfo.getX509CertificateFromStaticResolvers(Unknown Source) at ...keys.KeyInfo.getX509Certificate(Unknown Source) - HERE starts my custom code, see attachement -
------------------------------------------------------------------------
/** * Get a certificate that matches the given keyinfo. * @param keyInfo Keyinfo to check against. * @return certificate that matches the keyinfo. * @throws MyErrorException If no certificate was found just * because there was no matching, or because * the keystore was broken. */ private X509Certificate getCertificate(final KeyInfo keyInfo) throws MyErrorException { if (keyInfo != null) { if (keyInfo.containsX509Data()) { X509Certificate cert; try { StorageResolver storageResolver = new StorageResolver(new KeyStoreResolver(keyStore)); keyInfo.addStorageResolver(storageResolver); cert = keyInfo.getX509Certificate(); // HERE! } catch (StorageResolverException e) { throw new MyErrorException(e); } catch (KeyResolverException e) { throw new MyErrorException(e); } return cert; } else { throw new MyErrorException( "Message contains no KeyInfo. " + "Cannot check dsig."); } } else { throw new MyErrorException( "Message contains no X509Data. " + "Cannot check dsig."); } }