Ответ 1
Используйте BouncyCastle для создания сертификатов. Я считаю, что он также позволяет импортировать их в хранилище ключей Java.
Также ваш вопрос, похоже, очень похож на на этот.
Возможный дубликат:
Создание сертификатов, открытых и закрытых ключей с помощью Java
Мне нужно создать самоподписанные сертификаты во время выполнения, подписать их и импортировать в хранилище ключей Java. Я могу сделать это, используя "keytool" и "openssl" из командной строки следующим образом:
keytool -import -alias root -keystore keystore.txt -file cacert.pem
keytool -genkey -keyalg RSA -keysize 1024 -alias www.cia.gov -keystore keystore.txt
keytool -keystore keystore.txt -certreq -alias www.cia.gov -file req.pem
openssl x509 -req -days 3650 -in req.pem -CA cacert.pem -CAkey cakey.pem -CAcreateserial -out reqsigned.pem
keytool -import -alias www.cia.gov -keystore keystore.txt -trustcacerts -file reqsigned.pem
Я могу, конечно, отправить свое приложение с помощью ключей keytool и openssl и выполнить приведенные выше команды с Java, но я ищу более чистый подход, который позволил бы мне сделать все вышеописанное с использованием чистой Java.
Любые библиотеки, которые я могу использовать?
Используйте BouncyCastle для создания сертификатов. Я считаю, что он также позволяет импортировать их в хранилище ключей Java.
Также ваш вопрос, похоже, очень похож на на этот.
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Date;
// import sun.security.tools.keytool.CertAndKeyGen; // Use this for Java 8 and above
import sun.security.x509.CertAndKeyGen;
import sun.security.x509.X500Name;
public class UseKeyTool {
private static final int keysize = 1024;
private static final String commonName = "www.test.de";
private static final String organizationalUnit = "IT";
private static final String organization = "test";
private static final String city = "test";
private static final String state = "test";
private static final String country = "DE";
private static final long validity = 1096; // 3 years
private static final String alias = "tomcat";
private static final char[] keyPass = "changeit".toCharArray();
// copied most ideas from sun.security.tools.KeyTool.java
@SuppressWarnings("restriction")
public static void main(String[] args) throws Exception {
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);
CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country);
keypair.generate(keysize);
PrivateKey privKey = keypair.getPrivateKey();
X509Certificate[] chain = new X509Certificate[1];
chain[0] = keypair.getSelfCertificate(x500Name, new Date(), (long) validity * 24 * 60 * 60);
keyStore.setKeyEntry(alias, privKey, keyPass, chain);
keyStore.store(new FileOutputStream(".keystore"), keyPass);
}
}