我们可以用java的keytool做任何事情吗。安全API,如KeyPairGenerator等。
我有兴趣延长证书的具体有效期。
例如,以下命令运行可以使用Java安全API完成
keytool-genkeypair{-alias alias}{-keyalg keyalg}{-keysize keysize}{-sigalg sigalg}[-dname dname][keypass keypass]{-validity valDays}{-storetype storetype}
我只想使用java核心安全API,对第三方API不感兴趣
大多数keytool(至少是我所知道的)操作都可以使用java重新创建。安全性* 类与一些传统的实用程序类,例如,要创建一对新的键,可以使用:
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);
}
}
这是从KeyStore
检索KeyPair
的示例
这是一个(更详细的)示例,它不仅创建了KeyPair
,还将其存储在文件中
您还可以将密钥对与过期时间戳一起序列化为SealedObject,以模拟有效性参数和密钥工具提供的存储
编辑:仅SealedObject不会为您提供有效性
参数模拟,是与密钥对(在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加上一些实用程序类来实现keytools
提供的一些功能
我想用自签名证书连接到TLS服务器,所以我需要一个自定义信任存储。似乎绝对需要密码才能导入证书,但我真的不需要密码保护信任存储区。使用标准密码“changeit”可以工作,但我更希望没有密码。 请注意,这是一个“信任存储”,而不是“密钥存储”,因此信任存储中根本没有秘密材料:只有服务器的证书,因此客户机可以验证服务器是可信的。 使用可以吗?是否有其他工具可以从信任存储区中移除密码?了解到身份验证信
问题内容: 我知道jython允许我们从任何Java的类文件中调用Java方法,就好像它们是为python编写的一样,但是相反的可能吗? 我已经有很多用python编写的算法,它们在python和jython上都可以很好地工作,但是它们缺少适当的GUI。我计划将GUI与Java一起使用,并保持python库完整。我无法使用jython或python编写良好的GUI,也无法使用python编写良
本文向大家介绍我们可以在Java中使用throw语句后编写任何代码吗?,包括了我们可以在Java中使用throw语句后编写任何代码吗?的使用技巧和注意事项,需要的朋友参考一下 不,我们不能在throw 语句后放置任何代码,这会导致编译时错误Unreachable Statement。 Java中的Throw关键字 的关键字throw用于手动抛出异常。 每当需要根据用户定义的逻辑错误或条件挂起功能执
问题内容: 我们可以与一起使用其他任何TAG 吗? 喜欢 问题答案: 为了使您的代码有效,您不能在之外的标签中放置任何标签。 不过,您可以将任何块级元素放在中,如下所示:
问题内容: 以下是有效的枚举声明。 但是我可以用枚举类型覆盖抽象类吗? SomeEnumClass.java OverrideingEnumClass.java 如果没有,为什么不呢?有什么好的选择? 问题答案: 不,你不能;枚举类型全部扩展,并且是隐式的。枚举可以实现接口,也可以直接在有关的枚举类上声明相关方法。 (我确实看到了您想要的基本概念,它是一个mixin;也许Java 8接口在这方面会
请尽快为我提供一些有用的想法/解决方案。