我想以某种方式自动验证文本文件是否确实是 OpenVPN 配置文件。我不需要知道它是否完全正确,我只想检查它是否是用于 OpenVPN 的配置文件,而不是某人错误上传的 /etc/passwd。
openvpn 文档似乎没有任何与我的目标相关的选项。
如果有的话,有人可以告诉我一个现成的解决方案吗?
答案1
我猜想搜索这三对作为同一行上的前两个标记应该这样做:
dev ...
proto ...
cipher ...
这行代码可以达到这个效果:
perl -wanle'$h{$F[0]}=$F[1] if scalar @F>1; END {if ($h{dev} && $h{proto} && $h{cipher}) {print "ok";} else {print "not ok"; exit 1;}}' < the_file
the_file
最后是需要检查的文件。结果可能是:
ok
退出代码 0not ok
并退出代码 1
如果至少有两个标记,则代码会提取每一行,并将行中的第二个标记分配给以第一个标记为键的哈希值。最后,它会检查键dev
、proto
和是否存在cipher
。为了批量检查文件,应该优化代码。
答案2
cat [client_config_file].ovpn | sed '1,/<cert>/d;/<\/cert>/,$d' | openssl verify -verbose -CAfile /etc/openvpn/ca.crt
ca.crt = openvpn 服务器 CA(证书颁发机构)的公共证书文件
感谢:https://gist.github.com/dleonard00/fa482b4e803bf1f905526275c116c6d8