La chiave privata e pubblica del certificato deve avere lo stesso algoritmo, corretto?
Sì, naturalmente, pub / priv sono una coppia di chiavi.
Quindi questo codice sarebbe legale, per essere più flessibile (ad esempio ECDSA o DSA):
PrivateKey privkey = (PrivateKey) keystore.getKey(keyAlias, passphrase);
Certificate cert = keystore.getCertificate(keyAlias);
KeyFactory keyFactory = KeyFactory.getInstance(privkey.getAlgorithm()); //before: "RSA"
publicKey = keyFactory.generatePublic(keySpec1);'