I'm trying to implement an X.509 certificate generator from scratch (I know about the existing ones, but I need yet another one). What I cannot understand is how to calculate the SHA-1 (or any other) fingerprint of the certificate.
The RFC5280 says that the input to the signature function is the DER-encoded tbsCertificate field. Unfortunately, the hash that I calculate differs from the one produced by OpenSSL. Here's a step-by-step example.
- Generate a certificate using OpenSSL's x509 tool (in a binary DER form, not the ASCII PEM)
- Calculate its SHA-1 hash using
openssl x509 -fingerprint
- Extract the TBS field using
dd
(or anything else) and store it in a separate file; calculate its hash using thesha1sum
utility
Now, the hashes I get at steps 2 and 3 are different. Can someone please give me a hint what I may be doing wrong?