An signed applet is written to read a X509Certificate
Actually, the content can be read and printed out as a String.
Error occours in getting a X509Certificate instance.
Please kindly advise me.
Thanks a lot.
Regards,
Joyce
----------------------------
(A) Error is shown on Java Console - class X509Certificate is provided
by JSSE library.
# Error: The certificate is not approved for the attempted application.
(-8101)
# jar file: C:\windows\TEMP\jzipB0D1.TMP
# path: C:\windows\TEMP\jzipB0D1.TMP
# Error: loading of signatures has failed (-1)
# jar file: C:\windows\TEMP\jzipB0D1.TMP
# path: /projects2/applets/
# Verifier error ReadFileNS.init()V: Cannot find class
javax/security/cert/X509Certificate
# Applet exception: class ReadFileNS got a security violation: method
verification error
java.lang.VerifyError: ReadFileNS
at java.lang.ClassLoader.resolveClass(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass1(Compiled Code)
* at netscape.applet.AppletClassLoader.loadClass(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass(Compiled Code)
at netscape.applet.DerivedAppletFrame$LoadAppletEvent.dispatch(Compiled
Code)
at java.awt.EventDispatchThread$EventPump.dispatchEvents(Compiled Code)
at java.awt.EventDispatchThread.run(Compiled Code)
at
netscape.applet.DerivedAppletFrame$AppletEventDispatchThread.run(Compiled
Code)
---------------------------------
(B) HTML - the JAR file includes read ReadFileNS.class, and necessary
library jar files (JCE library, JSSE library, Entrust Java library, Netscape
library). Next, it is signed with a object signing certificate
(signtool -d"c:\Program Files\Netscape\Users\csdept" -k"Joyce(Student)'s
INPAC ID -Z"readNS.jar" signing.)
<HTML>
<APPLET
code=ReadFileNS
width=200
height=200
archive=readNS.jar>
</APPLET>
</HTML>
---------------------------------
(C) Applet - ReadFileNS.java
import java.applet.*;
import java.io.*;
import java.awt.*;
import netscape.security.*;
// Read X509Certificate
import javax.security.cert.*;
import sun.misc.*;
import java.math.*;
import iaik.security.rsa.*;
import iaik.asn1.*;
import iaik.asn1.structures.*;
public class ReadFileNS extends Applet {
public void init() {
try {
// Get Privilege to read local file
Principal prin = PrivilegeManager.getMyPrincipals()[0];
PrivilegeManager pm = PrivilegeManager.getPrivilegeManager();
String filename = new
String("c:\\project\\cert\\validator.cer");
Target readTarget = Target.findTarget ("FileRead");
readTarget.enablePrivilege (prin, filename);
// Read x509 certificate
FileInputStream fis = new FileInputStream (filename);
InputStreamReader isr = new InputStreamReader (fis);
BufferedReader in = new BufferedReader (isr);
StringWriter sw = new StringWriter();
String begin = in.readLine().trim();
if (begin.equals("-----BEGIN CERTIFICATE-----")) {
String base64 = new String();
boolean trucking = true;
while (trucking) {
String line = in.readLine().trim();
if (line.startsWith("-----"))
trucking = false;
else
base64 += line;
}
in.close();
sw.write(base64);
sw.write('\n');
byte[] certificateData = base642Byte(base64);
X509Certificate valCert =
X509Certificate.getInstance(certificateData);
java.security.interfaces.RSAPublicKey valX509 =
(java.security.interfaces.RSAPublicKey) valCert.getPublicKey();
if (valX509 != null) {
BigInteger valPubMod = valX509.getModulus();
BigInteger valPubExp = valX509.getPublicExponent();
sw.write("validator public key - modulus (bn) : " +
valPubMod.toString());
sw.write('\n');
sw.write("validator public key - exponent (be) : " +
valPubExp.toString());
sw.write('\n');
}
sw.write("End of X509 Certificate");
sw.write('\n');
}
sw.write("Finishing ...");
sw.write('\n');
setLayout (new BorderLayout());
add (new TextArea (sw.toString()), BorderLayout.CENTER);
} catch (CertificateException cex) {
System.err.println("CertificateException: " + cex.getMessage());
} catch (ForbiddenTargetException e) {
System.err.println ("User denied access to read file");
} catch (IOException e) {
System.err.println ("Error reading file");
} catch (Exception ex) {
System.err.println( "Exception: " + ex.getMessage());
}
}
public byte[] base642Byte(String base64) {
byte[] data = null;
if (base64 != null) {
BASE64Decoder dnc = new BASE64Decoder();
try {
data = dnc.decodeBuffer(base64);
} catch (IOException ioe) {
System.out.println("ReadFileNS::base642Byte() - " +
ioe.getMessage());
}
}
return data;
}