【发布时间】:2014-11-13 14:30:19
【问题描述】:
客户端和服务器持有匹配的证书。
当服务器发送通信时,它会解码证书中的序列号并将其传递给客户端。然后,客户端可以从其证书副本中获取序列号,并将其与服务器提供的序列号进行比较。这些应该匹配。
证书中序列号的字符串表示形式如下:-
58 17 9B 11 9E 0E F3 86 4A 41 DF A2 EE 60 92 08 58 17 9B 11 9E 0E F3 86 4A 41 DF A2 EE 60 92 08
Windows 服务器使用以下方法提取字节:X509Certificate.GetSerialNumber。提取的字节被视为:-
8 146 96 238 162 223 65 74 134 243 14 158 17 155 23 88 8 146 96 238 162 223 65 74 134 243 14 158 17 155 23 88
在 OS X(客户端)上,使用 Core Foundation 函数 SecCertificateCopySerialNumber,提取的字节返回:-
88 23 -101 -09 14 -13 -122 74 65 -33 -94 -18 96 -110 8 88 23 -101 17 -98 14 -13 -122 74 65 -33 -94 -18 96 -110 8
显然,这些不匹配。另外,使用Qt可以使用QSslCertificate,通过调用serialNumber()获取串口。但是,这会返回以下字节:-
53 56 58 49 55 58 57 98 58 49 49 58 57 101 58 48 101 58 102 51 58 56 54 58 52 97 58 52 49 58 100 102 58 97 50 554 101 8 581 58 54 101 8 581 58 48 58 57 50 58 48 50 58 48 50 58 48 58 58 48 58 58 48 56
这是怎么回事,为什么没有一个字节数组匹配,如何在 OSX 上提取与 Windows 服务器的序列号匹配的序列号?
【问题讨论】:
标签: .net macos qt security ssl