OpenSSL 摘要和签名验证指令dgst使用详解(3)

/*摘要算法选取sha256,密钥RSA密钥,对file.txt进行签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -sign RSA.pem -sha256 -out sign.txt file.txt
/*使用RSA密钥验证签名(prverify参数),验证成功*/
linuxidc@linuxidc:
~/test$ openssl dgst -prverify RSA.pem -sha256 -signature sign.txt file.txt
Verified OKt
/*从密钥中提取公钥*/
linuxidc@linuxidc:
~/test$ openssl rsa -in RSA.pem -out pub.pem -pubout
writing RSA key
/*使用RSA公钥验证签名(verify参数),验证成功*/
linuxidc@linuxidc:
~/test$ openssl dgst -verify pub.pem -sha256 -signature sign.txt file.txt
Verified OK

3、使用DSA密钥进行签名验证操作

/*使用DSA算法,摘要算法sha256,对file.txt进行签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -sign DSA.pem -sha256 -out sign.txt file.txt
/*使用DSA密钥验证签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -prverify DSA.pem -sha256 -signature sign.txt file.txt
Verified OK
/*使用DSA算法,摘要算法dss1,对file.txt进行签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -sign DSA.pem -dss1 -out sign1.txt file.txt
/*使用DSA密钥验证签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -prverify DSA.pem -dss1 -signature sign1.txt file.txt
Verified OK
/*提取公钥*/
linuxidc@linuxidc:
~/test$ openssl dsa -in DSA.pem -out pub.pem -pubout
read DSA key
writing DSA key
/*使用DSA公钥验证签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -verify pub.pem -dss1 -signature sign1.txt file.txt
Verified OK
/*使用DSA公钥验证签名*/
linuxidc@linuxidc:
~/test$ openssl dgst -verify pub.pem -sha256 -signature sign.txt file.txt
Verified OK
linuxidc@linuxidc:
~/test$

根据dgst man手册的定义,如果使用DSA算法进行签名验证,必须使用dss1摘要算法,但是本实验证明使用其他摘要算法也可以签名验证。此处不明白,希望大牛指点……

4、HMAC的使用

MAC 消息认证码,构造方法可以基于hash,也可以基于对称加密算法,HMAC是基于hash的消息认证码。数据和密钥作为输入,摘要信息作为输出,常用于认证。

linuxidc@linuxidc:~/test$ openssl dgst -sha256 -hmac 123456 file.txt HMAC-SHA256(file.txt)= b8e92990b9fc2ac9b58fde06f4738dceb4fb1fc47b4d2234a9c3f152907b333a

例如用户登录服务器

1、服务器给客户端发送一个随机数

2、客户端使用随机数作为密钥和用户密码做HMAC,结果发送给服务器

3、服务器去除存储的用户密码,也是用随机数与用户密码做HMAC,根据HMAC结果是否一样确认用户身份。

4、遗留问题

dgst中sigopt、mac、macopt参数的含义即使用方法,因为doc都没给出具体例子,待研究openssl源码后进行补充

为什么使用DSA签名的时候可以选择其他hash算法(man 手册说只能使用dss1)

还有dgst的hmac和hmac参数,没错,你没看错,它的确提供了两个完全一样的参数,给出的解释还不一样,还是研究源码去吧.

可恶的openssl……

更多OpenSSL相关内容可以查看以下的有用链接: 

使用 OpenSSL 命令行构建 CA 及证书 

Ubuntu安装OpenSSL 

通过OpenSSL提供FTP+SSL/TLS认证功能,并实现安全数据传输

Linux下使用OpenSSL生成证书

利用OpenSSL签署多域名证书

在OpenSSL中添加自定义加密算法 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/641e0f49059a3d44d03b0b9e5de055f6.html