当前位置: 首页 > 面试题库 >

以编程方式将CA Trust证书导入到现有密钥库文件中,而无需使用keytool

西门旻
2023-03-14
问题内容

我想创建一个将.cer CA导入现有密钥库文件的JAVA程序。这样最终用户可以更加方便地插入CA证书(无需使用CMD和命令中的键)。

JAVA代码可以在任何地方做到这一点吗?

我尝试以某种方式,但仍然无法将证书导入Java

CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certstream = fullStream (certfile);
Certificate certs = cf.generateCertificates(certstream);

错误是不兼容的类型,还有其他建议吗?

谢谢很多


问题答案:

以下代码将CA cert文件yourcert.cer插入您的密钥库,而无需使用keytool

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.io.IOException;
import java.io.InputStream;
import java.io.DataInputStream;
import java.io.ByteArrayInputStream;
import java.security.spec.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.util.Collection;

public class ImportCA {

    public static void main(String[] argv) throws Exception {
        String certfile = "yourcert.cer"; /*your cert path*/
        FileInputStream is = new FileInputStream("yourKeyStore.keystore");

        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        keystore.load(is, "yourKeyStorePass".toCharArray());

        String alias = "youralias";
        char[] password = "yourKeyStorePass".toCharArray();

        //////

        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream certstream = fullStream (certfile);
        Certificate certs =  cf.generateCertificate(certstream);

        ///
        File keystoreFile = new File("yourKeyStorePass.keystore");
        // Load the keystore contents
        FileInputStream in = new FileInputStream(keystoreFile);
        keystore.load(in, password);
        in.close();

        // Add the certificate
        keystore.setCertificateEntry(alias, certs);

        // Save the new keystore contents
        FileOutputStream out = new FileOutputStream(keystoreFile);
        keystore.store(out, password);
        out.close();
    }

    private static InputStream fullStream ( String fname ) throws IOException {
        FileInputStream fis = new FileInputStream(fname);
        DataInputStream dis = new DataInputStream(fis);
        byte[] bytes = new byte[dis.available()];
        dis.readFully(bytes);
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        return bais;
    }
}


 类似资料:
  • 问题内容: 如何从类路径中将.p12证书导入到Java密钥库中?首先,我使用了InstallCert https://code.google.com/p/java- use- examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java 进行了一些更改,以便获得服务器证书将被导入到Java安装目录中的密钥库中。这工作正常,但现在我

  • 我有两个不同的密钥对值,使用Javakeytools生成并存储在两个不同的文件中,称为keystore1.jks和keystore2.jks. 我所做的是从keystore2导入了密钥对。jks呼叫keystore1。jks通过下面的命令 我已经添加了密钥。jks到服务器使用这个密钥库监听ssl。 现在我已经从keystore2文件中导入了公钥。jks到名为truststore的信任库文件。jks

  • 问题内容: 在Java Web服务客户端的开发过程中,我遇到了一个问题。Web服务的身份验证使用客户端证书,用户名和密码。我从Web服务背后的公司那里收到的客户证书采用格式。当我使用文本编辑器检查文件时,它具有以下内容: 我可以在Internet Explorer中将该文件作为证书导入(无需输入密码!),并使用它通过Web服务进行身份验证。 通过首先剥离第一行和最后一行,转换为换行符并运行base

  • 问题内容: 我正在将SSL客户端连接到我的SSL服务器。当客户端由于根密钥不存在而无法验证证书时,我需要选择将该证书添加到代码中的本地密钥存储中并继续。有一些示例始终接受所有证书,但是我希望用户验证证书并将其添加到本地密钥存储中,而无需离开应用程序。 关于自定义SocketFactory,TrustManager,SSLContext等的内容很多,我不太了解它们如何组合在一起,或者这将是我实现目标

  • 问题内容: 我在配置中有这个: 我有一对X.509证书和一个密钥文件。 如何导入这两个以便在SSL和连接器中使用它们?我可以用google搜索的所有示例始终都会自己生成密钥,但是我已经有了密钥。 我试过了 但这只会导入证书而不是密钥文件,并导致 我已经尝试连接证书和密钥,但是得到了相同的结果。 如何导入密钥? 问题答案: 我使用了以下两个步骤,这些步骤是在其他答案中链接的评论/帖子中找到的: 第一

  • 我有一个由openssl以以下方式生成的密钥对 openssl genrsa-out private_key.pem 2048 所以我的问题是如何使用KeyTool将现有密钥导入到BKS密钥库中? 谢谢