唯一标识HTTPS证书

时间:2015-07-08 19:43:36

标签: node.js ssl

在NodeJS中,您可以通过req.connection.getPeerCertificate()的HTTPS连接获取客户端证书。这会产生如下结构(通过this code生成的自签名证书):

{ subject:
   { C: 'US',
     ST: 'Utah',
     L: 'Provo',
     O: 'ACME App Client',
     CN: 'client.example.net' },
  issuer:
   { C: 'US',
     ST: 'Utah',
     L: 'Provo',
     O: 'ACME Signing Authority Inc',
     CN: 'example.com' },
  modulus: 'A1E576A9017A839A8986664FE3159A8E2199D35AFCD0D55F27E1169C8D2C9E90E634F353C143EB05C03C297390070F9AF0752727AA7F5212CACE5B2B503418584392F4CF3D2669EE394EE310572E0C26EAF1D9FF4AB14B7F1CF155AF4DBA48263357FDC99778E568F39F8D68AA34496F2D10A66CC1ED99EB17CDE8D10FBE850B386D593CC3AD42A8AF0FC25EFABB14018418EE7E56111E073D81447EE14D0D242F242B4507B2325F06D5ABF0FFCD986958D4E843D700FA97E88C6BBCB91958FCA142EFE4D85D6A0FBE8A0C74BBED001C6B9F4452C926AD77858C71057096A07E056BE33F8568B84373930CFD489C4E7FA1B09F63413114F2AC97EA0C0CF3B98B',
  exponent: '10001',
  valid_from: 'Jul  8 19:26:10 2015 GMT',
  valid_to: 'Jul  7 19:26:10 2018 GMT',
  fingerprint: 'F1:40:33:5E:D0:9F:1A:F0:07:3B:B9:6C:BA:90:26:33:3F:A0:2D:F0',
  serialNumber: 'FF164CD2E63BFDF7',
  raw: <Buffer 30 82 03 46 30 82 02 2e 02 09 00 ff 16 4c d2 e6 3b fd f7 30 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05 00 30 67 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 ... > }

将这些字段中的哪一个(如果有的话)视为客户端的加密安全身份,与我的SSH公钥可能被视为我的身份的方式相同?

根据How do you test a public/private DSA keypair?,比较modulus可确保证书与身份匹配。这将使我相信modulus将成为调用&#34;身份&#34;的适当字段,并同意RSA Encryption (Key generation),其中不同的密钥对将始终具有不同的模数。但是,我没有找到任何可靠的信息让我相信模数在所有情况下都是完全独特的(例如,指纹通常应该是唯一的,但由于它更短,因此更容易发现碰撞[如果我将指纹视为UUID,则伪造身份。

理想情况下,我正在寻找有关证书中所含信息性质的更多信息。我的大多数搜索结果都提供了有关如何使用openssl的信息,而不是所涉及的概念。

1 个答案:

答案 0 :(得分:0)

  

指纹:&#39; F1:40:33:5E:D0:9F:1A:F0:07:3B:B9:6C:BA:90:26:33:3F:A0:2D:F0&#39 ;,

指纹对于证书是唯一的,并且相当于SSH中密钥的指纹。