[ Shimmy @ 03.07.2003. 16:39 ] @
Imam ovaj deo koda koji mi nalazi sertifikat u Mozillinom key storage-u.
Koristim funkciju findCertByIssuerAndSerialNumber(byte[] arg0, INTEGER arg1)kojoj treba da prosedim
DER enkodovan parametar issuer name kao niz bajtova i certificate serial number koji je tipa INTEGER.
Evo tog dela koda.

try
{
CryptoManager manager = CryptoManager.getInstance();
CryptoToken acToken = manager.getTokenByName("Internal Key Storage Token");
System.out.println("IsLoggedIn " + acToken.isLoggedIn());
manager.setThreadToken(acToken);

CryptoStore store = acToken.getCryptoStore();
org.mozilla.jss.crypto.X509Certificate[] certArr = store.getCertificates();

byte[] derCert = certArr[0].getEncoded();
Certificate certe = (Certificate) ASN1Util.decode(Certificate.getTemplate(), derCert);
Name issuerName = certe.getInfo().getIssuer();
byte[] derIssuer = ASN1Util.encode(issuerName);
byte[] derSerial = certArr[0].getSerialNumber().toByteArray();
INTEGER intSN = new INTEGER(derSerial);


org.mozilla.jss.crypto.X509Certificate javaCert = null;
javaCert = manager.findCertByIssuerAndSerialNumber(derIssuer, intSN);
}catch(Exception e){
System.out.println(e);
}
Ovo mi sve ok radi (makar mi se tako cini) ali problem nastaje kada da ocu da umesto Name varijable korisitm String varijablu u kojoj je upisan issuer info. Ne znam onda kako da iz String varijable dobijem taj DER enkodovan niz bajtova. U tom slucaju funkcija manager.findCertByIssuerAndSerialNumber(derIssuer, intSN) mi baca ObjectNotFoundException?!

Zna li neko kako bi to moglo da se uradi ? Nesto ovako bi hteo ali nikako da mi uspe. U pitanju je Java aplet.

public void start() {
try {
CryptoManager manager = CryptoManager.getInstance();
CryptoToken acToken = manager.getTokenByName("Internal Key Storage Token");
System.out.println("IsLoggedIn " + acToken.isLoggedIn());
manager.setThreadToken(acToken);

CryptoStore store = acToken.getCryptoStore();
org.mozilla.jss.crypto.X509Certificate[] certArr = store.getCertificates();

String issuerInfo = certArr[0].getIssuerDN().toString();
// sto sadrzi nesto ovako ... CN=CA2K, OU=SEB, O=ZASLON d.o.o., L=Beograd, ST=Vozdovac, C=SI, // [email protected]
String serialNumber = certArr[0].getSerialNumber().toString();

test(issuerInfo, serialNumber);

} catch (Exception e) {
System.out.println(e);
}
}


public void test(String issuerInfo, String serialNumber)
{
try
{
CryptoManager manager = CryptoManager.getInstance();
CryptoToken acToken = manager.getTokenByName("Internal Key Storage Token");
System.out.println("IsLoggedIn " + acToken.isLoggedIn());
manager.setThreadToken(acToken);

CryptoStore store = acToken.getCryptoStore();
org.mozilla.jss.crypto.X509Certificate[] certArr = store.getCertificates();

//kako dobiti sada OD issuerInfo DER enkodovan niz bajtova i da mi sve radi ok kao u prvom slucaju?

byte[] derIssuer = issuerInfo.GetBytes();
// ovo definitivno ne radi ... pa cak i kad mu prosledim u issuerInfo vec enkodovan podatak.

BigInteger bi = new BigInteger(serialNumber);
byte[] derSerial = bi.toByteArray();
INTEGER intSN = new INTEGER(derSerial);

org.mozilla.jss.crypto.X509Certificate javaCert = null;
//pri sledecem pozivu dobijem exception: ObjecyNotFound
javaCert = manager.findCertByIssuerAndSerialNumber(derIssuer, intSN);


}catch(Exception e){
System.out.println(e);
}
return res;
}

Zna li neko o cemu pricam i moze li mi pomoci ? :)