用于TLS / SSL的密码套件强化的Java正则表达式

时间:2017-01-13 06:38:50

标签: java regex ssl regex-lookarounds

我需要Java Regex,它可以匹配用于设置SSL / TLS密码的参数

有效密码: (为了一次性测试多个模式,将它们添加到以逗号分隔的字符串中,稍后迭代每个模式匹配)

"ALL:!kRSA:!CBC,ALL:-aRSA:-CBC:SHA256,ALL:!kRSA,ALL:!aRSA,ALL:!RSA,ALL:!EDH-RSA-DES-CBC-SHA,ALL:!DES-CBC,ALL:!DES,ALL:-RSA+AES-128-CBC+SHA256";

可与regex = "^((?:ALL)|(?:ALL)(:([!-]?(a|k)?[A-Z0-9]+([+-]?(a|k)?[A-Z0-9]+)?)*)*)$";

匹配

但是当我尝试无效密码时:(基本上它应该无法匹配)

invalidciphers = "ALL:+DES,+DES,-DES,DEFAULT:-aRSA,akRSA,kDHE-aRSA,!ECDHE";

无法创建一个。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

^ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*(?:,ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*)*$

请参见regex demo

方案为^<single_pattern>(?:,<single_pattern>)*$。它匹配字符串的开头,然后是单个模式,然后匹配0个或多个逗号,然后是单个模式,直到字符串结尾。

这里的single_patternALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*

  • ALL-子字符串
  • (?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*-出现0次或以上
    • :-冒号
    • [!-]?-可选的!-
    • [ak]?-可选的ak
    • [A-Z0-9]+-1个以上大写字母或数字
    • (?:[+-]?[ak]?[A-Z0-9]+)*-0次或多次出现
      • [+-]?-可选的+-
      • [ak]?-可选的ak
      • [A-Z0-9]+-1个以上大写字母或数字