Linux – Unable to verify signature (openssl)

encryptionlinuxopensslSecurity

I am trying to verify a signature, but get "unable to load key file." This is a CentOS server with OpenSSL version 1.0.2 (22 Jan 2015).

The keys are generated like this:

ssh-keygen -t rsa -f serverkey -N '' -b 2048
mv serverkey serverkey-priv.pem
ssh-keygen -f serverkey.pub -e -m pem > serverkey-pub.pem ; rm -f serverkey.pub

Which results in serverkey-priv.pem & serverkey-pub.pem

I sign the message like this:

openssl dgst -sha256 -sign serverkey-priv.pem -out message.sig message.txt

The message.sig file gets generated fine. So far so good.

However, when I try to verify the message using the sig file just generated:

openssl dgst -sha256 -verify serverkey-pub.pem -signature message.sig message.txt

I get "unable to load key file."

What am I doing wrong?

Best Answer

I get significantly different output when I use

openssl rsa -in serverkey-priv.pem -pubout -out serverkey-pub.pem

than when I use

ssh-keygen -f serverkey.pub -e -m pem > serverkey-pub.pem

The public key file created by openssl rsa -pubout does successfully verify the message. It appears that ssh-keygen's -m pem file format for public keys isn't compatible with what openssl is expecting. In fact, reading the public key info with the openssl rsa -text command requires -RSAPublicKey_in which doesn't seem to be a supported option for dgst.