package be.neutrinet.ispng.vpn.ca; import be.neutrinet.ispng.VPN; import be.neutrinet.ispng.vpn.Client; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.openssl.PEMParser; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.math.BigInteger; import java.util.Date; /** * Created by wannes on 04/07/14. */ @DatabaseTable(tableName = "certificates") public class Certificate { @DatabaseField(generatedId = true) public int id; @DatabaseField(foreign = true, foreignAutoRefresh = true, canBeNull = false) public Client client; @DatabaseField public BigInteger serial; @DatabaseField public Date signedDate; @DatabaseField public Date revocationDate; public PKCS10CertificationRequest loadRequest() { String csrPath = VPN.cfg.getProperty("ca.storeDir", "ca") + "/" + id + ".csr"; File csr = new File(csrPath); try { if (csr.exists()) { PEMParser pp = new PEMParser(new FileReader(csr)); return (PKCS10CertificationRequest) pp.readObject(); } } catch (Exception ex) { Logger.getLogger(getClass()).error("Failed to load csr", ex); } return null; } public boolean valid() { if (signedDate == null || signedDate.getTime() > System.currentTimeMillis()) return false; if (revocationDate.getTime() <= System.currentTimeMillis()) return false; return true; } public X509CertificateHolder get() { String crtPath = VPN.cfg.getProperty("ca.storeDir", "ca") + "/" + serial + ".crt"; File crt = new File(crtPath); try { if (crt.exists()) { PEMParser pp = new PEMParser(new FileReader(crt)); return (X509CertificateHolder) pp.readObject(); } } catch (Exception ex) { Logger.getLogger(getClass()).error("Failed to load certificate", ex); } return null; } public byte[] getRaw() { String crtPath = VPN.cfg.getProperty("ca.storeDir", "ca") + "/" + serial + ".crt"; File crt = new File(crtPath); try { if (crt.exists()) { return IOUtils.toByteArray(new FileInputStream(crt)); } } catch (Exception ex) { Logger.getLogger(getClass()).error("Failed to load certificate", ex); } return null; } }