获取公钥的SHA256哈希值。

15

我有一个证书mycert.pem。我通过命令获取了该证书的公钥

openssl x509 -pubkey -noout -in mycert.pem  > pubkey.pem

我如何获取公钥的SHA256哈希值?


2
请参考 https://dev59.com/d2kw5IYBdhLWcg3w2-Ik 获取公钥的 SHA256 值,如果它不在 .pem 文件中。 - aleb
3个回答

18
您可以使用ssh-keygen。首先转换文件格式。
ssh-keygen -i -m PKCS8 -f pubkey.pem > NEWpubkey.pem

接着获取指纹

ssh-keygen -lf NEWpubkey.pem

获取类型推断

2048 SHA256:hYAU9plz1WZ+H+eZCushetKpeT5RXEnR8e5xsbFWRiU 没有注释 (RSA)


嗯,有趣的是,我通过ssh-keygen和通过openssl(或者@just-be-happy展示的非常聪明的方法)得到的结果不同 - 我想知道为什么会这样。 - Gwyneth Llewelyn

8

使用openssl的-pubkey命令可以输出PEM格式的密钥(即使您使用-outform DER也是如此)。

假设您有一个RSA公钥,您需要将密钥转换为DER格式(二进制),然后获取其哈希值:

 openssl rsa -in pubkey.pem -pubin -outform der | openssl dgst -sha256

@Leem 你确定你在创建 pubkey.pem 文件的同一文件夹中执行了该命令吗? - oliv
是的,我确定。它还输出了routines:PEM_read_bio:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22/libressl/crypto/pem/pem_lib.c:704 - Leem
嗯...实际上,问题在于我生成的证书和公钥大小为0。那里出了些问题... - Leem
@Leem,这意味着命令 openssl x509 -pubkey -noout -in mycert.pem 没有起作用。请修复您的证书并反馈我发布的命令。 - oliv
我正在修复它,稍后会在这里回复你。谢谢! - Leem

1

您可以尝试直接使用base64解码公钥,然后将其传输到shasum -a256openssl sha256以获取所需的哈希值:

sed '1d;$d' ./pubkey.pem | base64 -D | openssl sha256 # or shasum -a256

如果您使用命令行来输出pubkey.pem文件,可以像下面这样操作:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

你需要提前去除第一行和最后一行,例如 sed '1d;$d'

接着我们使用 base64 的-d-D解码(默认输出到标准输出),并将结果通过管道传输给openssl sha256

所有操作可以合并为一个命令:

sed '1d;$d' <(openssl x509 -pubkey -noout -in mycert.pem) | base64 -D | openssl sha256

呵呵。神奇!:-) 在我的情况下,我没有一个完整的证书——只有公钥!——而openssl抱怨不满,但还是输出了一些东西。巧合的是,它与你(改编后)的命令产生的SHA256完全相同:cat mypubkey.pem | sed '1d;$d' | base64 -d | shasum -a256。(或者sha256sum -b——一样的东西)。“嘿,妈妈!没有openssl命令!” - Gwyneth Llewelyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接