当前位置: 首页 > 知识库问答 >
问题:

是否可以在没有密码的情况下创建JKS keystore文件?

叶俊郎
2023-03-14

我正在试验OSGi条件权限机制。更具体地说,我试图使用org.osgi.service.condpermadmin.BundleSignerCondition来限制哪些包可以启动。我所拥有的文档指出,为了使用该权限,我必须使用org.osgi.framework.trust.repositories框架配置属性指定到JKS密钥库的路径。但是,同一文档提到该属性中提到的JKS不能有密码。所以问题是:如何创建一个没有密码的JKS?Keytool实用工具拒绝创建密码为空的JKS。

共有1个答案

华谭三
2023-03-14

一段时间以来,您无法使用keytool创建具有空白密码的密钥库,但仍可以通过编程方式进行。

像这样阅读证书:

private static Certificate readCert(String path) throws IOException, CertificateException {
    try (FileInputStream fin = new FileInputStream(path)) {
        return CertificateFactory.getInstance("X.509").generateCertificate(fin);
    }
}

与使用如下所示的空密码创建密钥存储相比:

try {
    // Reading the cert
    Certificate cert = readCert("/tmp/cert.cert");

    // Creating an empty JKS keystore
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    keystore.load(null, null);

    // Adding the cert to the keystore
    keystore.setCertificateEntry("somecert", cert);

    // Saving the keystore with a zero length password
    FileOutputStream fout = new FileOutputStream("/tmp/keystore");
    keystore.store(fout, new char[0]);
} catch (GeneralSecurityException | IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
keytool -list -keystore keystore

它将要求一个密码,但您可以简单地按回车键。您将得到以下警告,但将列出密钥库的内容:

*****************  WARNING WARNING WARNING  *****************
* The integrity of the information stored in your keystore  *
* has NOT been verified!  In order to verify its integrity, *
* you must provide your keystore password.                  *
*****************  WARNING WARNING WARNING  *****************

这可能对你有用。

 类似资料: