我正在使用 Expect 在远程系统上创建 CSR 文件。我正在捕获系统的输出并将其放入本地 PC 上的文件中(需要的地方)。
我需要验证该文件的第一行和最后一行,以确保该文件如下所示:
-----BEGIN CERTIFICATE REQUEST-----
.
.
.
-----END CERTIFICATE REQUEST-----
最初我只是通过循环查找文件的行来查找最后一行(或者我是这么认为的)-----END CERTIFICATE REQUEST-----
set fp [ open $csrname ]
while {[gets $fp line] != -1} {
if { $line == "-----END CERTIFICATE REQUEST-----" } {
puts "The Certificate Signing Request file \"$csrname\" has been succesfully created"
} else {
puts "The certificate file is invalid."
puts $line
exit 41
}
}
我的逻辑有缺陷,因为我最终陷入了 if
的错误腿中。声明并退出。
如何仅验证文件的第一行和最后一行?
最佳答案
企业社会责任实际上并没有那么长;最多只有几千字节。我们可以一次性验证批处理!
# Load *everything* from a file at once
set f [open $csrname]
set contents [read $f]
close $f
# Validate it using this regular expression:
set RE {^-----BEGIN CERTIFICATE REQUEST-----\n.*\n-----END CERTIFICATE REQUEST-----\n*$}
if {![regexp $RE $contents]} {
puts "The certificate file is invalid."
exit 1
# This spot is unreachable, of course...
}
puts "The Certificate Signing Request file \"$csrname\" has been succesfully created"
我建议检查分隔符之间的位是否也仅使用有效字符(它是 base64 编码的 PKCS#10),但一旦超出基础知识,情况就会变得更加复杂。也许最好只是确认您没有被截断或根本不是 CSR 的东西。
关于tcl - Expect Script - 如何验证文件的第一行和最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736871/