如何查看RSA公钥文件

问题描述 投票:0回答:3

在 shell 脚本中我想验证公共 RSA 文件

public.pem

我想要的只是检查该文件是否是真正的 RSA 公钥文件,而不是其他文件,例如常规文件或损坏的密钥。

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

请注意,我没有携带任何其他文件(例如私钥)。

我已经检查过文件大小不为零并且我使用 MD5。

我发现的另一个可能的检查是该文件包含文本

BEGIN PUBLIC KEY
END PUBLIC KEY

我还通过 Google 找到了这个命令:

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

有没有更好的方法使用

openssl
来做到这一点?

shell openssl rsa public-key pem
3个回答
46
投票

可以使用任何公钥格式解析器,包括

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

5
投票

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

将其另存为验证证书密钥:

#!/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

2
投票

如果您的公钥以

-----BEGIN RSA PUBLIC KEY-----

开头,请尝试此命令
openssl rsa -RSAPublicKey_in -in /path/to/pub_key.pem -noout -text
© www.soinside.com 2019 - 2024. All rights reserved.