我有一个证书mycert.pem
。我通过命令获取了该证书的公钥:
openssl x509 -pubkey -noout -in mycert.pem > pubkey.pem
我如何获取公钥的SHA256哈希值?
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使用openssl的-pubkey
命令可以输出PEM格式的密钥(即使您使用-outform DER
也是如此)。
假设您有一个RSA公钥,您需要将密钥转换为DER格式(二进制),然后获取其哈希值:
openssl rsa -in pubkey.pem -pubin -outform der | openssl dgst -sha256
pubkey.pem
文件的同一文件夹中执行了该命令吗? - olivroutines:PEM_read_bio:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22/libressl/crypto/pem/pem_lib.c:704
。 - Leemopenssl x509 -pubkey -noout -in mycert.pem
没有起作用。请修复您的证书并反馈我发布的命令。 - oliv您可以尝试直接使用base64解码公钥,然后将其传输到shasum -a256
或openssl sha256
以获取所需的哈希值:
sed '1d;$d' ./pubkey.pem | base64 -D | openssl sha256 # or shasum -a256
-----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