java - 如何从 X509Certificate 中提取摘要算法

标签 java x509certificate

我可以从 X509Certificate 实例中提取 OID 和签名算法的名称,例如 "SHA256WithRSA" 但如何提取摘要算法的名称,例如例如“SHA256”

除了 "with" 的字符串分割或 OID 的固定映射之外,还有其他方法吗?

附带问题:拆分“with”是否安全?

最佳答案

证书仅包含签名算法 OID,它映射到唯一的一对摘要/算法。因此,找到摘要算法的最简单方法是使用映射表 OID -> 摘要算法。

不幸的是,我不知道可以在哪里找到这些 OID 的集中位置。但是,它们可以收集在这些 RFC 中:

解析算法名称并按“With”拆分应该可以工作,但有这些限制

  • 它可能仅适用于 Oracle Cryptography 提供程序(请参阅 signature algorithm naming conventions 上的文档)。另一个具有自己的证书实现的提供商可能会使用另一个不兼容的命名约定。
  • 如果算法未知,getSigAlgName() 方法将返回 OID.a.b.c.d... 形式的字符串。例如,旧版 Java6 不支持 SHA256withDSA 算法,将打印 OID.2.16.840.1.101.3.4.3.2

关于java - 如何从 X509Certificate 中提取摘要算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294540/

相关文章:

Java 从 Windows keystore 访问中间 CA?

Java: DateTimeFormatter 在秒和毫秒都为 0 时无法解析时间字符串?

java - 无法连接到JReport中的数据库

java - 使用父类(super class)的构造函数

java - 带有泛型的返回类型

security - Key Vault 中的证书身份验证

android - 如何从我的 Android 应用程序访问用户安装的 key 和证书?

objective-c - OpenSSL x509 证书 : Add Extension with X509_add1_ext_i2d()

java - 如何使用java代码将数据绑定(bind)到JTable

asp.net-core - 如何在 AspNetCore 中仅使用公钥验证使用 x509 签名的 JWT token