当检查密钥和 crt 是否匹配时,我通常会比较模数的哈希值,如下所示:
openssl rsa -noout -modulus -in key.key | openssl md5
openssl x509 -noout -modulus -in crt.crt | openssl md5
这显然依赖于对两个哈希值的明显比较,但这并不理想。
我尝试使用 diff 和进程替换
diff <(openssl rsa -noout -modulus -in key.key | openssl md5) <(openssl x509 -noout -modulus -in crt.crt | openssl md5)
但似乎进程替换不适用于管道。等等,我不能将哈希值与另一个替换嵌套在一起吗?
diff <(openssl md5 <(openssl rsa -noout -modulus -in key.key)) <(openssl md5 <(openssl x509 -noout -modulus -in crt.crt))
它可以工作,但是 diff (或 comm)总是会检测到差异,因为比较的值是
MD5(/dev/fd/63)= 0bf775063be9c69057747c15bf723786 | MD5(/dev/fd/62)= 0bf775063be9c69057747c15bf723786
答案1
我不知道为什么我自己的答案被删除了,但解决方案是:
它与管道一起工作,正如 muru 所述,sudo 存在一些问题。
在没有 sudo 命令的情况下运行命令,但以 root 身份运行
答案2
因此 diff 不能像这样接受管道diff <<<"some st" <<<"some sy"
,但可以这样做,diff file <<<"some sy"
所以这个函数会有所帮助
dubdiff(){
arg1="$(mktemp)"
arg2="$(mktemp)"
eval "$1" > "$arg1"
eval "$2" > "$arg2"
diff "$arg1" "$arg2"
rm "$arg1" "$arg2"
}
它将运行第一个命令并将其放入与最近的命令相同的文件中,然后对它们进行区分,然后运行dubdiff 'openssl rsa -noout -modulus -in key.key | openssl md5' 'openssl x509 -noout -modulus -in crt.crt | openssl md5'