【问题标题】:Extract Serial from SSL Certificate从 SSL 证书中提取序列号
【发布时间】: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


    【解决方案1】:

    字符串、无符号字符、十六进制表示

    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,无符号字符,倒序十进制表示

    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,有符号字符,十进制表示

    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
    

    所有三个表示彼此相等

    【讨论】:

    • windows 版本以 8 146 96 开头,第一个版本以 0x60 0x92 0x08 (十进制为 96 146 8)结尾
    • 谢谢,这很好,虽然奇怪的是它们被颠倒了。
    猜你喜欢
    • 2019-02-28
    • 2013-07-07
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2023-02-13
    • 2019-06-11
    相关资源
    最近更新 更多