我正在配置Java客户端,以便它可以连接到https服务。该服务处于实验性环境中,因此未提供签名证书,我需要手动将其导入到Java密钥库中才能使其正常工作。

在浏览器中,我检查了证书,序列号类似于:

‎ca d0 fa e6 4d c2 2b 16 60 88 51 fb e4 e3 2a 1f


然后我下载了该证书并将其导入密钥库,但是如果再次检查序列号,请在命令中使用keytool实用程序:

keytool -list -v -keystore cacerts


序列号更改为:

-352f0519b23dd4e99f77ae041b1cd5e1


但是,MD5和SHA1 /指纹相同,那么为什么要更改序列号?而且可能由于此不匹配而无法连接到服务器?

我引用此链接进行问题分类:
http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html

最佳答案

这只是将无符号整数误表示为有符号整数。序列号本身是相同的。如果将正部分写为二进制,则可能会更好地看到这一点

11001010110100001111101011100110010011011100001000101011000101100110000010001000010100011111101111100100111000110010101000011111
00110101001011110000010100011001101100100011110111010100111010011001111101110111101011100000010000011011000111001101010111100001


第二行(0x352f0519b23dd4e99f77ae041b1cd5e1)是原始序列号SN = 0xcad0fae64dc22b16608851fbe4e32a1f的Two's complement,即所有位被翻转并加了1。因此,Java实际上显示了相同的数字,但显示为带符号的值(SN == -(-SN)

关于ssl - 使用keytool导入Java keystore 后,站点证书序列号已更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26266506/

10-15 04:38