如何正确计算证书的指纹

Fer*_*era 13 ssl sha256

我在文件file.pem中有一个像这样的CA

\n
-----BEGIN CERTIFICATE-----\nMIIDczCCAlugAwIBAgIHALRRMXUkMTANBgkqhkiG9w0BAQ0FADBHMRswGQYDVQQD\nDBJIdHRwQ2FuYXJ5IFJvb3QgQ0ExEzARBgNVBAoMCkh0dHBDYW5hcnkxEzARBgNV\nBAsMCkh0dHBDYW5hcnkwHhcNMjAwMTE1MDc1MjUwWhcNMzEwMTEyMDc1MjUwWjBH\nMRswGQYDVQQDDBJIdHRwQ2FuYXJ5IFJvb3QgQ0ExEzARBgNVBAoMCkh0dHBDYW5h\ncnkxEzARBgNVBAsMCkh0dHBDYW5hcnkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\nggEKAoIBAQDpDLS2xbpRfTgCPn9Xz0PdWNdppo7vUltGQlzJfD0FQZsyiCU3sYAe\noRGaInwgS4knBEt/9hxaLC8ivz9UlXWIhg8Xy4g+J463HfD4kP2fQElHfo+SlFwc\nflkIVKgOB/rMgFMp6LH9YP+bmYMy3ndXYkTkYAGL6Q2EWO90HQLYkt2pm5ij7755\nvp8Dksc7LHnHo0sqzrpB953Sx5dVTSyQ91fU3scxo8xvcJQG/vYfbEJA6rZunlLO\n3NG8i8JhEYpEjWlf7MV0WIjlPk2vMCHKei/Wyd0msrmL12vjOl3IxMSZQn76SZ1k\n+l9E+wuaAw61DnrzD2gkF3yfCNHr8xsrAgMBAAGjZDBiMB0GA1UdDgQWBBQpj7CB\nUKauWN0/B4d2jAQxbmjTpDAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBtjAj\nBgNVHSUEHDAaBggrBgEFBQcDAQYIKwYBBQUHAwIGBFUdJQAwDQYJKoZIhvcNAQEN\nBQADggEBAKjH9gYYRg+BLXqey9FGd7mR5hCC3lB7NfLEyJULlAoLgzdGieXfcwdX\nQe5clq6Wfk35v2VxVBg1j/oxZYZyJxFvWiuJ840FHgOb5kD7qTS7i735PCbAyCVf\nuSTonQw0Ny8gnjoTijjO/Dh0O6j2wr2kIHORdC2H4Kbya7jyriqY/M/tiuolDyBc\n4RWW52pmDdFi+DMvdroRMaE/1fzDiYRB4ongMNLm7fytGTg9Dakhy7o4OC+dmlGm\nmiUEQIACm2cWrfI1/tjwh+BpbXG91i8y8FPA4YZ2iNmF1133dJhjNx66LETOfJA5\n9dZqO1SpbFk4NVpI4UYzfzMdpqw2KgM=\n-----END CERTIFICATE-----\n
Run Code Online (Sandbox Code Playgroud)\n

我希望具有SHA-256哈希值的哈希值具有如下内容:

\n
"certificate_hash": "8eb1ec754c1d04af13efa97da1be05c90f1342e5"\n
Run Code Online (Sandbox Code Playgroud)\n

但我不知道该怎么做。我知道我的 CA 的十六进制值并尝试检查转换的最终结果,但它 \xe2\x80\x99s 不一样。如何从该 CA 获得 SHA-256 哈希值?

\n

签名的 SHA-256 哈希值:

\n
B2:62:DC:C4:F2:4A:AA:51:C9:5C:00:6C:0F:27:19:00:DE:42:3D:D3:8C:79:72:89:9A:8D:89:37:84:2E:1E:58\n
Run Code Online (Sandbox Code Playgroud)\n

签名的 SHA-1 哈希值:

\n
84:29:CA:F9:EE:3A:3C:CB:4A:08:42:66:0E:BA:2D:84:FC:B4:E5:51\n
Run Code Online (Sandbox Code Playgroud)\n

Ste*_*ich 22

您拥有PEM 编码的证书。要计算指纹,首先需要将其从 PEM 表示形式解码为二进制文件。为此,-----需要删除页眉和页脚(以 开头),其余部分需要解码为Base64。然后可以从生成的二进制文件计算 SHA-1 或 SHA-256 哈希值。

简而言之,在 Linux 命令行上(使用 shell 提示符“$”):

$ grep -v ^- cert.pem  | base64 -d | sha256sum
b262dcc4f24aaa51c95c006c0f271900de423dd38c7972899a8d8937842e1e58 -

$ grep -v ^- cert.pem  | base64 -d | sha1sum
8429caf9ee3a3ccb4a0842660eba2d84fcb4e551  -
Run Code Online (Sandbox Code Playgroud)

b262dc...与您的问题完全相同,B2:62:DC:...只是不同。

当然,也可以简单地使用openssl x509

$ openssl x509 -in cert.pem -fingerprint -sha256
SHA256 Fingerprint=B2:62:DC:C4:F2:4A:AA:51:C9:5C:00:6C:0F:27:19:00:DE:42:3D:D3:8C:79:72:89:9A:8D:89:37:84:2E:1E:5

$ openssl x509 -in cert.pem -fingerprint -sha1
SHA1 Fingerprint=84:29:CA:F9:EE:3A:3C:CB:4A:08:42:66:0E:BA:2D:84:FC:B4:E5:51
Run Code Online (Sandbox Code Playgroud)

  • 为了避免“openssl x509”也输出不需要的 PEM 证书副本,请添加“-noout” (2认同)