我正在构建一个加密的Web应用程序,它允许用户在浏览器内的客户端进行签名和加密。该应用程序必须与IE和Firefox兼容。它在IE浏览器中的Firefox中工作得很好,我面临着一个问题。加载JAVA中的Internet Explorer密钥存储区中的问题
最近,印度政府开始向个人签发两个数字证书,一个用于签署数据,另一个用于加密。这些证书具有相同的CN。我正在使用以下代码来循环证书。
public static Certificate selectedCert = null;
KeyStore keystore1 ;
keystore1 = KeyStore.getInstance("Windows-MY");
keystore1.load(null, null);
if (keystore1 != null) {
enumeration = keystore1.aliases();
while (enumeration.hasMoreElements()) {
alias = enumeration.nextElement();
selectedCert = keystore1.getCertificate(alias));
System.out.println(selectedCert.getPublicKey());
}
}
虽然从Firefox读取证书密钥库中的别名由火狐其是唯一的,但是在IE的情况下,它需要从IE需要通用名称(CN)作为别名证书生成的。这样它会得到两个具有相同别名的条目。现在,无论何时我想要获取整个证书对象,都必须传递别名,所以无论何时传递别名,它总是会给我第一个证书,而我无法访问具有相同别名的第二个证书。
要澄清更多,如果我有两个以“Kuntal Shah”名义和一个名为“Abhishek Desai”的证书。 然后别名枚举将有 “Kuntal沙阿” “Kuntal沙阿” “阿布舍克德赛” 当我做
selectedCert = keystore1.getCertificate(alias));
它总是返回我的第一个,我从来没有能够得到第二个。
我尝试了一些代码,在C#中,我有一个简单的解决方案
X509Store storeMy = new X509Store(StoreName.My,StoreLocation.CurrentUser);
storeMy.Open(OpenFlags.ReadOnly);
Console.WriteLine("Found certs with the following subject " +"names in the {0} store:", storeMy.Name);
foreach (X509Certificate2 cert in storeMy.Certificates)
{
Console.WriteLine("\t{0}", cert.SubjectName.Name);
}
但是,这并不与Firefox,并且它不会在Linux上运行。
任何人都可以告诉我如何访问第二个证书吗?或者还有其他不同的方式吗?
谢谢@GregKopff,我会按照解释的那样做。 –