【发布时间】:2013-10-16 23:51:04
【问题描述】:
编写代码生成数字证书
在浏览器中安装时出现错误
无法解码文件。要么不是 PKCS #12 格式,要么已损坏,要么您输入的密码不正确。
但我不知道如何添加该密码以满足PKCS #12 format。怎么搭配?
public KeyPair generateKeyPair() {
KeyPair pair = null;
try {
String password = "1234";
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = Utils.createFixedRandom();
keyGen.initialize(1024, random);
pair = keyGen.generateKeyPair();
PrivateKey privkey1 = pair.getPrivate();
PublicKey pubKey1 = pair.getPublic();
byte[] privateKeyBytes = pair.getPrivate().getEncoded();
byte[] encryptedPrivateKeyBytes = passwordEncrypt(
password.toCharArray(), privateKeyBytes);
//Problem might be here
Signature dsa = Signature.getInstance("SHA1withRSA");
dsa.initSign(privkey1);
Cipher cipher = Cipher
.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey1, random);
byte[] input = new byte[] { (byte) 0xbe, (byte) 0xef };
System.out.println("input : " + Utils.toHex(input));
byte[] cipherText = cipher.doFinal(input);
System.out.println("cipher: " + Utils.toHex(cipherText));
cipher.init(Cipher.DECRYPT_MODE, privkey1);
byte[] plainText = cipher.doFinal(cipherText);
System.out.println("plain : " + Utils.toHex(plainText));
} catch (Exception e) {
System.err.println("Caught exception " + e.toString());
}
return pair;
}
证书生成成功,卡在这里。
感谢任何提示。
【问题讨论】:
-
您是在浏览器中将其安装为个人(客户端)证书,还是作为浏览器中的受信任服务器证书?如果它是受信任的证书,您应该只需要证书文件,而不是 PKCS12。例如,在 Firefox 中,当您转到证书管理器和“权限”选项卡并单击导入时,它需要一个证书。如果您转到“您的证书”选项卡,它需要一个 P12,因为 P12 将包含私钥,用于向另一台服务器证明您的身份。
-
@gtrig 感谢 gtrig 的详细评论。我想要实现的是我将向用户(客户)提供一个具有私钥和公钥的证书。他在他的浏览器中安装了该证书,当我的应用程序启动时,我会得到它并用于加密和解密数据。请给我一些提示..我无法从这一点上移动。
-
@SURESH 听起来您确实需要私钥。我不清楚的是您的应用程序如何与浏览器密钥库进行交互。您的应用程序是否在他的服务器上运行(他的浏览器运行在同一台服务器上?)或者您的应用程序是否在他的浏览器连接到的另一台服务器上运行?
-
@gtrig 根据您的评论,我想我在这里遗漏了很多细节。我可以通过电子邮件 ID 与您交谈以寻求澄清吗?我的任务是向用户提供包含私钥和公钥的自签名证书。他给我一个密码。在他的浏览器中安装时,它会要求输入该密码。他安装后就是这样。稍后,我们的应用程序使用 Web 应用程序中的小程序联系该证书。你能帮我吗?
标签: java encryption cryptography digital-signature digital-certificate