客户端和服务器持有匹配的证书。
当服务器发送通信时,它会解码证书中的序列号并将其传递给客户端。然后,客户端可以从其证书副本中获取序列号,并将其与服务器提供的序列号进行比较。这些应该匹配。
证书中序列号的字符串表示形式显示如下:-
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 http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.getserialnumber(v=vs.110).aspx。提取的字节看起来是:-
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 函数SecCertificateCopy序列号 https://developer.apple.com/library/mac/Documentation/Security/Reference/certifkeytrustservices/index.html#//apple_ref/c/func/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,可以使用QSsl证书 http://qt-project.org/doc/qt-5/qsslcertificate.html并通过调用获取序列号序列号() http://qt-project.org/doc/qt-5/qsslcertificate.html#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 58 101 101 58 54 48 58 57 50 58 48 56 58 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 58 101 101 58 54 48 58 57 50 58 48 56
这里发生了什么,为什么没有一个字节数组匹配,以及如何在 OSX 上提取与 Windows 服务器中的序列匹配的序列号?
字符串、无符号字符、十六进制表示
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
所有三个表示彼此相等
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)