如何检查公共RSA密钥文件

时间:2014-10-08 14:28:11

标签: shell openssl rsa public-key pem

在shell脚本中我想验证公共RSA文件。 我想要做的就是找到一种方法来检查这个文件是一个真正的公钥文件,没有别的。

我可以问一下这里的专家有什么方法可以验证这个输入文件,以检查这是一个真正的公钥文件,而不是常规文件。

我将来会使用这个公钥文件来验证传入的加密gzip文件,但现在已经超出了范围。

我想要的只是验证输入文件以检查其正版RSA公钥文件而不是普通文件。请注意我没有任何其他文件(例如:私钥)。

例如:如果文件是‘public.pem’我只想在里面检查它是一个真正的RSA公钥文件,而不仅仅是一个文本或文件的文件没有被破坏。 我已经检查过该文件不是零大小和md5。

我找到的其他可能的检查 检查文件包含文字‘BEGIN PUBLIC KEY’‘END PUBLIC KEY’ 在google中也找到了这个命令,有没有更好的方法来使用openssl

‘openssl rsa -noout -text -inform PEM -in pubkey.pem -pubin’

由于

2 个答案:

答案 0 :(得分:18)

可以使用任何公钥格式解析器,包括openssl甚至自己解析密钥,因为格式并不困难。

解析失败时,命令行工具设置非零退出代码:

openssl rsa -inform PEM -pubin -in pubkey.pem -noout &> /dev/null
if [ $? != 0 ] ; then
    echo "this was definitely not a RSA public key in PEM format"
    exit 1
fi

只是检查任何公钥:

openssl pkey -inform PEM -pubin -in pubkey.pem -noout &> /dev/null
if [ $? != 0 ] ; then
    echo "this was definitely not a public key in PEM format"
    exit 1
fi

答案 1 :(得分:1)

以下脚本应适用于OpenSSL支持的所有PEM格式的密钥和证书。我已经使用匹配和不匹配的证书在各种有效和无效的ECDSA和RSA密钥上对其进行了测试。

将其另存为verify-cert-key:

#!/usr/bin/env bash
certFile="${1}"
keyFile="${2}"
certPubKey="$(openssl x509 -noout -pubkey -in "${certFile}")"
keyPubKey="$(openssl pkey -pubout -in "${keyFile}")"
if [[ "${certPubKey}" == "${keyPubKey}" ]]
then
  echo "PASS: key and cert match"
else
  echo "FAIL: key and cert DO NOT match"
fi

使其可执行:

chmod +x verify-cert-key

在证书和密钥上运行它:

./verify-cert-key server-crt.pem server-key.pem
相关问题