Generování self-signed certifikátu v Javě

Kvůli projektu WinStrom a hlavně jeho novému serveru, jsme potřebovali při prvním spuštění systému vygenerovat self-signed certifikát. Certifikát totiž nemůže být podepsán žádnou certifikační autoritou, protože je možné aplikaci libovolně instalovat a jenom bychom vše zkomlpikovali (podobně je to i s SSH klíči při instalaci Linuxu).

Protože jsme potřebovali podporu více platforem a protože nechceme komplikovat instalaci a detekci nástrojů, nemohli jsem použít ani openssl ani keytool.

Pro Javu naštěstí existuje snadná cesta programově:

try {
	long validityInDays = 100000;
	String alias = "winstrom";
	String name = "CN=WinStrom Server, O=WinStrom s.r.o.";
	char[] keyPass = "".toCharArray();

	/* generate keypair */
	CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA");
	X500Name x500Name = new X500Name(name);
	keypair.generate(1024); /* 1024 bit */

	PrivateKey privKey = keypair.getPrivateKey();

	X509Certificate[] chain = new X509Certificate[1];

	/* sign certificate */
	chain[0] = keypair.getSelfCertificate(x500Name, validityInDays * 24L * 60L * 60L);
	chain[0].checkValidity();

	/* create empty keystore */
	KeyStore keyStore = KeyStore.getInstance("JKS");
	keyStore.load(null, keyPass);
	/* store new certificate */
	keyStore.setKeyEntry(alias, privKey, keyPass, chain);

	return keyStore;

} catch (GeneralSecurityException e) {
	throw new RuntimeException(e);
} catch (IOException e) {
	throw new RuntimeException(e);
}

Kód je extrahován z keytool z OpenJDK.

Na vývoj již používám hlavně jen OpenJDK, protože je možné se podívat v Eclipse do všech zdrojáků (tedy i těch v com.sun.*). Problémy se pak hledají mnohem snáze.

2 thoughts on “Generování self-signed certifikátu v Javě”

  1. Pěkný návod, to se může hodit 🙂

    Jen moc nechápu to toCharArray(),
    vždyť přece:
    char[] prvni = „“.toCharArray();
    char[] druhy = new char[0];
    System.out.println(Arrays.equals(prvni, druhy));
    Nebo je to jen z výukových důvodů, kdyby tam někdo to heslo chtěl dopsat?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *