【发布时间】:2015-08-25 05:58:18
【问题描述】:
我有密钥类型 DSA、位长 1024、签名算法 SHA256 的证书:
我正在将它转换为 Java 中的 X509Certificate。当我尝试从 X509Certificate 获取签名算法时,我得到类似 2.16.840.1.101.3.4.3.2.
CertificateFactory factory=CertificateFactory.getInstance("X.509");
X509Certificate cert=(X509Certificate) factory.generateCertificate(inputStream);
System.out.println(cert.getSigAlgName());
上述方法适用于所有其他类型(正确获取名称为 SHA256withRSA)。不适用于 SHA256withDSA(获取 2.16.840.1.101.3.4.3.2 预期 SHA256withDSA)。如何从证书中获得正确的签名算法?还有其他方法吗?
【问题讨论】:
-
我认为你应该发布更多的代码和更少的证书 ;-) 只要确保你不发布敏感信息。
-
当你说“上述方法适用于所有其他类型”时,你实际上得到了什么你认为有效的东西?另外,您说不适用于 SHA256withDSA,意味着获得签名 ID“2.16.840.1.101.3.4.3.2”不是您的预期结果?您能否告诉我们您使用方法 cert.getSigAlgName() 得到的输出,看看这个输出是否是您需要的预期信息?
-
@ChaitanyaP 请参阅已编辑问题
-
@Peanut 谢谢我会考虑你的观点。证书是所有人都可以访问的公共信息。
-
您是在 Java 8 上运行,还是使用自定义提供程序?只有在 8(或更高版本)中,默认提供程序才实现 FIPS 186-3(组大小 2k 和 3k,子组 224 和 256,以及相应的 SHA-2 哈希)。
标签: java ssl certificate x509certificate