【问题标题】:java - how to store a key in keystorejava - 如何将密钥存储在密钥库中
【发布时间】:2012-12-15 17:56:38
【问题描述】:

我需要将 2 个密钥存储到 KeyStore 以下是相关代码:

KeyStore ks = KeyStore.getInstance("JKS");
String password = "password";
char[] ksPass = password.toCharArray();
ks.load(null, ksPass);
ks.setKeyEntry("keyForSeckeyDecrypt", privateKey, null, null);
ks.setKeyEntry("keyForDigitalSignature", priv, null, null);
FileOutputStream writeStream = new FileOutputStream("key.store");
ks.store(writeStream, ksPass);
writeStream.close();

虽然我得到一个执行“私钥必须伴随着证书链”

那究竟是什么?我将如何生成它?

【问题讨论】:

    标签: java keystore


    【解决方案1】:

    您还需要为私钥条目提供证书(公钥)。对于由 CA 签署的证书,链是 CA 的证书和最终证书。对于自签名证书,您只有自签名证书
    示例:

    KeyPair keyPair = ...;//You already have this  
    X509Certificate certificate = generateCertificate(keyPair);  
    KeyStore keyStore = KeyStore.getInstance("JKS");  
    keyStore.load(null,null);  
    Certificate[] certChain = new Certificate[1];  
    certChain[0] = certificate;  
    keyStore.setKeyEntry("key1", (Key)keyPair.getPrivate(), pwd, certChain);  
    

    要生成证书,请遵循此link:
    示例:

    public X509Certificate generateCertificate(KeyPair keyPair){  
       X509V3CertificateGenerator cert = new X509V3CertificateGenerator();   
       cert.setSerialNumber(BigInteger.valueOf(1));   //or generate a random number  
       cert.setSubjectDN(new X509Principal("CN=localhost"));  //see examples to add O,OU etc  
       cert.setIssuerDN(new X509Principal("CN=localhost")); //same since it is self-signed  
       cert.setPublicKey(keyPair.getPublic());  
       cert.setNotBefore(<date>);  
       cert.setNotAfter(<date>);  
       cert.setSignatureAlgorithm("SHA1WithRSAEncryption");   
        PrivateKey signingKey = keyPair.getPrivate();    
       return cert.generate(signingKey, "BC");  
    }
    

    【讨论】:

    • 公钥是 Key 类型,他们请求 Certificate[]。我如何将公钥转换为证书链
    • 你没有X509Certificate吗?你从哪里得到的私钥?
    • 您需要使用X509V3CertificateGenerator 创建一个证书,您将把它作为参数传递给密钥库,作为您的私钥条目bouncycastle.org/wiki/display/JA1/… 的一部分
    • @Cratylus 你说KeyPair keyPair = ...;//You already have this 。我没有!我要它!我在哪里可以买到?
    • 这是一个不错的解决方案。但是,我不允许使用充气城堡,只能使用标准 Java 8 JCE 库。怎么办?
    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多