我正在配置一个java客户端,以便它可以连接到https服务。该服务处于实验环境中,因此未提供签名证书,我需要通过manaully将其导入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
答案 0 :(得分:2)
这只是无符号整数作为有符号整数的误传。序列号本身是相同的。如果将正面部分写为二进制
,则可能会更好地看到这一点11001010110100001111101011100110010011011100001000101011000101100110000010001000010100011111101111100100111000110010101000011111
00110101001011110000010100011001101100100011110111010100111010011001111101110111101011100000010000011011000111001101010111100001
第二行(0x352f0519b23dd4e99f77ae041b1cd5e1)是原始序列号SN = 0xcad0fae64dc22b16608851fbe4e32a1f的Two's complement,即所有位都被翻转并且添加了1。因此,Java实际上显示相同的数字,但作为有符号值(SN == -(-SN)
)