【问题标题】:Regex for identifing a certificate uniquely用于唯一标识证书的正则表达式
【发布时间】:2016-09-21 14:53:47
【问题描述】:

我正在尝试提出与“密钥容器”的值匹配的正则表达式,但前提是颁发者是 CN=My_root_CA 并且证书是非根证书 应该满足以上所有以唯一匹配证书,因为有几个类似的证书

       ================ Certificate 3 ================
   Serial Number: 5471f66c066334ab48285398b0f24b7e
   Issuer: CN=My_Root_CA, O=Experian, OU=Hunter, L=Sofia, S=CA, C=BG
    NotBefore: 20/09/2016 15:48
    NotAfter: 20/09/2024 15:48
   Subject: CN=192.168.127.107
   Non-root Certificate
   Cert Hash(sha1): 46 92 41 60 56 36 32 fa bb 82 f2 45 0b 80 37 c4 28 15 e4 ca
     Key Container = 52668461-19b4-4fef-80d6-5982ff702c3b
     Unique container name: 0893f8f220ed765fabe249818ff664b9_bba0a089-1c2b-49c8-9f49-e4b211a91a55
     Provider = Microsoft Strong Cryptographic Provider
   Encryption test passed

我试过这个CN=My_Root_CA((.|\n)*?)Non-root Certificate((.|\n)*?)Key Container =(.*\b)

但是如果我们有,这不正确匹配

  ================ Certificate 1 ================
   Serial Number: b4b81124ff17b6af4eb18053cd9fecd5
   Issuer: CN=My_Root_CA, O=Experian, OU=Hunter, L=Sofia, S=CA, C=BG
    NotBefore: 20/09/2016 15:48
    NotAfter: 20/09/2024 15:48
   Subject: CN=My_Root_CA, O=Experian, OU=Hunter, L=Sofia, S=CA, C=BG
   Signature matches Public Key
   Root Certificate: Subject matches Issuer
   Cert Hash(sha1): 8c 47 dd 5a 74 47 3a 74 e1 2a c4 de 6f 95 35 04 f6 2d d4 8a
     Key Container = 25ea8612-7fd3-4504-97f8-d9150e6bfd63
     Unique container name: 4e3f7aa1fb469fd4cb7b184d188059be_bba0a089-1c2b-49c8-9f49-e4b211a91a55
     Provider = Microsoft Strong Cryptographic Provider
   Encryption test passed

   ================ Certificate 2 ================
   Serial Number: XXXXXXXX
   Issuer: CN=TEST TEST FIND Root
    NotBefore: 18/08/2015 16:16
    NotAfter: 18/09/2017 16:26
   Subject: CN=TEST CA
   CA Version: V9.0
   Certificate Template Name (Certificate Type): SubCA
   Non-root Certificate
   Template: SubCA
   Cert Hash(sha1): 55 1b 22 8c c9 eb 25 58 25 3f 00 67 a3 6e 68 b1 62 43 de 75
   No key provider information
   Cannot find the certificate and private key for decryption.
   Encryption test passed

   ================ Certificate 3 ================
   Serial Number: 5471f66c066334ab48285398b0f24b7e
   Issuer: CN=My_Root_CA, O=Experian, OU=Hunter, L=Sofia, S=CA, C=BG
    NotBefore: 20/09/2016 15:48
    NotAfter: 20/09/2024 15:48
   Subject: CN=192.168.127.107
   Non-root Certificate
   Cert Hash(sha1): 46 92 41 60 56 36 32 fa bb 82 f2 45 0b 80 37 c4 28 15 e4 ca
     Key Container = 52668461-19b4-4fef-80d6-5982ff702c3b
     Unique container name: 0893f8f220ed765fabe249818ff664b9_bba0a089-1c2b-49c8-9f49-e4b211a91a55
     Provider = Microsoft Strong Cryptographic Provider
   Encryption test passed

【问题讨论】:

  • 是 Java 吗?请分享您当前的代码。一个正则表达式要么很长,要么效率低下,但可能已经足够了。
  • 它是蚂蚁。但是问题在 regex101

标签: php regex certificate


【解决方案1】:

您需要使用否定的前瞻断言。

CN=My_Root_CA(?:(?!={4,})[\s\S])*?Non-root Certificate(?:(?!={4,})[\s\S])*?Key Container\s+=\s+(.*\b)

(?:(?!={4,})[\s\S])*? -> 不会超过四个 = 符号。

DEMO

【讨论】:

  • 带有惰性量词的缓和贪婪令牌不是一个好主意,但已经足够了。我会展开它以提高效率。
  • 效率低下?他清楚地显示了命中尝试..你的意思是正则表达式?这暂时有效.. :-)
  • 我不是说有没有尝试,只是一个缓和的贪婪令牌的想法是限制字符串的一部分以最快的方式匹配下一个令牌(最短小路)。是的,当然,它至少应该在 regex101.com 上工作。
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多