Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

verifying a file signature with openssl dgst

I am signing packets in some Java code and I want to verify the signatures on a C server. I want to fork openssl for this purpose (can always use library functions later... when I know openssl can verify the signatures); however, it's failing to do so:

openssl dgst -verify cert.pem -signature file.sha1 file.data 
  • all it says is "unable to load key file"

The certificate says:

openssl verify cert.pem   cert.pem: /C=.... error 20 at 0 depth lookup:unable to get local issuer certificate 

However, I specifically don't care about verifying the certificate, I want only to verify the signature for a given file!

The output of openssl x509 -in cert.pem -noout -text is:

Certificate:     Data:         Version: 1 (0x0)         Serial Number:             ...         Signature Algorithm: sha1WithRSAEncryption         Issuer: C=...         Validity             Not Before: Feb  1 15:22:44 2010 GMT             Not After : Jun 19 15:22:44 2037 GMT         Subject: C=...         Subject Public Key Info:             Public Key Algorithm: rsaEncryption             RSA Public Key: (2048 bit)                 Modulus (2048 bit):                     00:cc:cc:f9:c7:3a:00:0f:07:90:55:d9:fb:a9:fe:                     ...                     32:cc:ee:7f:f2:01:c7:35:d2:b5:9b:35:dd:69:76:                     00:a9                 Exponent: 65537 (0x10001)     Signature Algorithm: sha1WithRSAEncryption         39:d6:2c:6b:6a:00:74:b5:81:c2:b8:60:d6:6b:54:11:41:8d:         ...         8f:3e:3f:5d:b3:f8:dd:5e 
like image 524
Will Avatar asked Mar 05 '10 08:03

Will


People also ask

How do I validate a signature on a file?

Check the signature on an EXE or MSI fileRight-click the EXE or MSI file and select Properties. Click the Digital Signatures tab to check the signature.

How do I verify a signature code?

Right click the .exe of the program in question and select Properties. Select Digital Signatures. Under Signature List, select the Signature, and click Details. You will see information regarding the Code Signing certificate that was used to sign the executable.

What does OpenSSL Dgst do?

DESCRIPTION. The digest functions output the message digest of a supplied file or files in hexadecimal. The digest functions also generate and verify digital signatures using message digests. The generic name, dgst, may be used with an option specifying the algorithm to be used.

How do you check if a file is digitally signed?

Open the file that contains the certificate you want to view. Click File > Info > View Signatures. In the list, on a signature name, click the down-arrow, and then click Signature Details.


1 Answers

openssl dgst -verify foo.pem expects that foo.pem contains the "raw" public key in PEM format. The raw format is an encoding of a SubjectPublicKeyInfo structure, which can be found within a certificate; but openssl dgst cannot process a complete certificate in one go.

You must first extract the public key from the certificate:

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

then use the key to verify the signature:

openssl dgst -verify pubkey.pem -signature sigfile datafile 
like image 149
Thomas Pornin Avatar answered Sep 24 '22 00:09

Thomas Pornin