java - 如何在JAVA中计算证书的公钥与Windows计算的公钥相匹配

标签 java certificate

In our project we need to calculate the public key of a certificate and sha1 hash of public key. I tried to do this using java API "X509Certificate.getPublicKey()" and then calculated the hexadecimal representation of it. But the value obtained through this process does not match with the value that windows shows for "Public Key" when certificate is opened by double clicking it.

作为示例,我计算了以下证书的公钥(PEM 格式)

-----BEGIN CERTIFICATE-----
MIICxDCCAi2gAwIBAgIBBjANBgkqhkiG9w0BAQQFADCBujELMAkGA1UEBhMCSU4x
EDAOBgNVBAgMB0hhcnlhbmExEDAOBgNVBAcMB0d1cmdhb24xDzANBgNVBAoMBk1j
QWZlZTEbMBkGA1UECwwSQXBwbGljYXRpb25Db250cm9sMTIwMAYDVQQDDClNY0Fm
ZWVBcHBsaWNhdGlvbkNvbnRyb2xUZXN0Q2VydEF1dGhvcml0eTElMCMGCSqGSIb3
DQEJARYWYXBwX2NvbnRyb2xAbWNhZmVlLmNvbTAeFw0xMjAzMTMxMDM4MDZaFw0x
MzA3MjYxMDM4MDZaMIGUMQswCQYDVQQGEwJJTjEQMA4GA1UECBMHSGFyeWFuYTEQ
MA4GA1UEBxMHR3VyZ2FvbjEUMBIGA1UEChMLdGVzdENvbXBhbnkxEDAOBgNVBAsT
B3Rlc3RPcmcxETAPBgNVBAMTCHRlc3ROYW1lMSYwJAYJKoZIhvcNAQkBFhd0ZXN0
TmFtZUB0ZXN0RG9tYWluLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
qjRldfjFgIqMrXiNcKYA31bX+nLsw3Q0CeBiWq3oDh3sz/gk7dz+9yLRub+gnosU
Sgj0td5yolhmCKPq9YZe5q/YLm9vsbU6WJr4VU3Uwi4uHTPZxojjUjx9esqTS1uh
AQJhT1BxOLJ+HNb/VqwZ66SB7mPhK2BTT7Kym5zCApsCAwEAATANBgkqhkiG9w0B
AQQFAAOBgQB7yiAwtYiB05lJf+kUCgOmfUx/18ZJPB1Am+fIr+aMo2Djgv7bLPG5
vesq0t1opBJIS9LqswW8Bf3IGdhc+33+LYRVxUB8mLHZ2KyCqfuuT7PdHHsiyNDg
uMdO+equDFUsTMv0y6KyzCf89ZPjGhS4O09zVyR/KtZzSE6dyvyBNg==
-----END CERTIFICATE-----

java API计算出的公钥的十六进制表示为 30819f300d06092a864886f70d010101050003818d0030818902818100aa346575f8c5808a8cad788d70a600df56d7fa72ecc3743409e0625aade80e1decccff824 eddcef722d1b9bfa09e8b144a08f4b5de72a2586608a3eaf5865ee6afd82e6f6fb1b53a589af8554dd4c22e2e1d33d9c688e3523c7d7aca934b5ba10102614f507138b 27e1cd6ff56ac19eba481ee63e12b60534fb2b29b9cc2029b0203010001

另一方面,窗口显示的公钥的十六进制表示形式(当我们双击证书时,公钥的值出现在详细信息选项卡中)如下 30818902818100aa346575f8c5808a8cad788d70a600df56d7fa72ecc3743409e0625aade80e1deccff824eddcef722d1b9bfa09e8b144a08f4b5de72a2586608a3eaf5 865ee6afd82e6f6fb1b53a589af8554dd4c22e2e1d33d9c688e3523c7d7aca934b5ba10102614f507138b27e1cd6ff56ac19eba481ee63e12b60534fb2b29b9cc2029b0 203010001

所以,java API计算的公钥和windows计算的公钥是不同的。我观察到,窗口显示的公钥与java API计算公钥中第45个字符的值相同。

所以,请帮助我们了解window如何计算证书的公钥,以便我们可以使用相同的机制。

最佳答案

详细答案请参阅下面的帖子。

这是因为 Windows 剥离并在 java 中提供了额外的元数据。

how to convert public key of an x509 certificate in JAVA to hex

关于java - 如何在JAVA中计算证书的公钥与Windows计算的公钥相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9684743/

相关文章:

javax.ws.rs.ProcessingException : Unable to find a MessageBodyReader of content-type application/json and type class

Java:静态方法数组

java - Froyo (Android 2.2) 中的 Android Google map v2 无法正常工作

java - 调用数据库时应用程序卡住

certificate - 将证书从智能卡复制到计算机

ssl - jboss中如何获取客户端证书

java - 不使用 JavaFX 时使用 FXCollections 是否干净/正确

windows - Certutil -backupKey 上的访问被拒绝

ssl - 为什么 Firefox 不信任我的自签名证书?

java - keytool 无法加载 PKCS12 文件