[ 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 ? :) |