我们可以使用keytool和Java.security apis(如KeyPairGenerator等)执行任何操作。
我有兴趣以特定的有效期扩展证书。
例如,可以使用Java安全API
完成以下命令keytool -genkeypair {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-validity valDays} {-storetype storetype}
我想只使用java核心安全API而不对第三方API感兴趣
答案 0 :(得分:0)
keytool
(至少那些我认识的)可以使用java.security.*
类和一些aditional实用程序类重新创建大多数操作,例如,创建一对可以使用的新键:
private static final String ALGORITHM = "RSA";
private static final String PROVIDER = "BC";
private PrivateKey privateKey;
private PublicKey publicKey;
...
public void generateNewKeyPair() {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM, PROVIDER);
keyGen.initialize(2048, new SecureRandom());
KeyPair keypair = keyGen.genKeyPair();
privateKey = keypair.getPrivate();
publicKey = keypair.getPublic();
} catch (Exception e) {
LOG.error("Error creating keyPair", e);
}
}
以下是来自KeyPair
KeyStore
这是一个(更详细的)example,它不仅会创建KeyPair
,还会将其存储在文件中
您还可以将KeyPair
与到期时间戳一起序列化为SealedObject,以模拟validity
参数和keytool
编辑: SealedObject单独不会为您提供validity
参数模拟,是与密钥对(在SealedObject
中)一起存储的时间戳将“模拟”到期日期(可以看作是密钥的有效性)。例如:
class KeyWithExpiration {
private PublicKey publicKey;
private Date expirationDate;
}
public static void serializeEncrypted(File file, Serializable instance) {
// With these lines, I hope to expose some of the craft that is needed to work with the API
PBEKeySpec keySpecObj = new PBEKeySpec(PASSWORD, SALT, ITERATIONS);
Cipher ecipherObj = Cipher.getInstance(keyObj.getAlgorithm());
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey keyObj = secretKeyFactory.generateSecret(keySpecObj);
SealedObject sealedObject = new SealedObject(instance, ecipherObj);
ObjectOutputStream objOutputStream = new ObjectOutputStream(new FileOutputStream(file));
objOutputStream.writeObject(sealedObject);
objOutputStream.close();
}
// Generate a new KeyWithExpiration
KeyWithExpiration key = new KeyWithExpiration(keyPair, DateUtil.future().days(365));
serializeEncrypted(new File(".key"), key);
这就是为什么需要API和一些实用程序类来实现keytool