我的java应用程序如何获得公钥,例如google或facebook域,而不需要在cacerts密钥库中添加它们的.cer文件?我怀疑原因是这样的域使用众所周知的认证机构,CA,可能已经在java cacerts密钥库文件(取决于版本java?我试图看看是否有证书到2030-2040有效期,或者我在我的理论是错误的).但如果我猜对了,那么这些域的公钥存储在哪里?我想在这个问题上的Maven意见.
eivgtgni1#
您是正确的-如果服务器提供的证书不是由可识别的CA签署的,那么签署所提供证书的证书需要添加到CACERTS中。可识别的CA是指默认Java安装的CACERTS。严格来说要复杂一些,如果一个证书的签名路径(signed-by,signed-by...)可以在服务器提供的证书链中追溯到CACERTS中的一个证书,那么这个证书就是可信的。公钥是证书的一部分。如果你想看到CACERTS中的所有公钥,请从JAVA_HOME运行以下命令,路径为bin:
keytool -list -rfc -keystore jre/lib/security/cacerts
密码已更改这将为您提供大量的输出,其中将包括实际的证书,例如:
-----BEGIN CERTIFICATE----- MIICsDCCAhmgAwIBAgIQZ8jh6OO+HL38kTuOpiOHSTANBgkqhkiG9w0BAQUFADCB izELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxML RHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENl cnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcN OTcwMTAxMDAwMDAwWhcNMjEwMTAxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTAT BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNV BAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNV BAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0A MIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u 6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522 FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS+mqF4EF+3kKMZ/F QfRWVKvpwuWXjhj+kckMPiZkyaFMJ2SnvQGTVXFuF0853BvcSTUQOSP/ypvIz2Y/ 3Ewa1IEGQlIf4SaxFhe65nByMUToTo1b5NP50OOPJWQx5yr4GIg2GlLFDUE1G2m3 JvUXzMEZXkt8XOKDgJH6L/uatxY= -----END CERTIFICATE-----
然后使用类似this的站点检查公钥-它位于“RAW OUTPUT”下
Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:d6:2b:58:78:61:45:86:53:ea:34:7b:51:9c:ed: b0:e6:2e:18:0e:fe:e0:5f:a8:27:d3:b4:c9:e0:7c: 59:4e:16:0e:73:54:60:c1:7f:f6:9f:2e:e9:3a:85: 24:15:3c:db:47:04:63:c3:9e:c4:94:1a:5a:df:4c: 7a:f3:d9:43:1d:3c:10:7a:79:25:db:90:fe:f0:51: e7:30:d6:41:00:fd:9f:28:df:79:be:94:bb:9d:b6: 14:e3:23:85:d7:a9:41:e0:4c:a4:79:b0:2b:1a:8b: f2:f8:3b:8a:3e:45:ac:71:92:00:b4:90:41:98:fb: 5f:ed:fa:b7:2e:8a:f8:88:37 Exponent: 65537 (0x10001)
1条答案
按热度按时间eivgtgni1#
您是正确的-如果服务器提供的证书不是由可识别的CA签署的,那么签署所提供证书的证书需要添加到CACERTS中。可识别的CA是指默认Java安装的CACERTS。
严格来说要复杂一些,如果一个证书的签名路径(signed-by,signed-by...)可以在服务器提供的证书链中追溯到CACERTS中的一个证书,那么这个证书就是可信的。
公钥是证书的一部分。如果你想看到CACERTS中的所有公钥,请从JAVA_HOME运行以下命令,路径为bin:
密码已更改
这将为您提供大量的输出,其中将包括实际的证书,例如:
然后使用类似this的站点检查公钥-它位于“RAW OUTPUT”下