linux

如何利用OpenSSL在Linux上进行数字签名

小樊
45
2025-04-25 21:57:39
栏目: 云计算

在Linux上使用OpenSSL进行数字签名,可以按照以下步骤操作:

生成密钥对

  1. 生成私钥

    openssl genpkey -algorithm RSA -out private_key.pem -aes256
    

    这将生成一个2048位的RSA私钥,并使用AES-256加密保护私钥文件。

  2. 提取公钥

    openssl rsa -in private_key.pem -pubout -out public_key.pem
    

    这将从私钥中提取公钥并保存到public_key.pem文件中。

对文件进行签名

  1. 生成摘要

    openssl dgst -sha256 -binary input_file > digest.bin
    

    这将计算input_file的SHA-256摘要,并将其保存到digest.bin文件中。

  2. 使用私钥对摘要进行签名

    openssl pkeyutl -sign -in digest.bin -out signature.bin -inkey private_key.pem
    

    这将使用私钥对摘要进行签名,并将签名结果保存到signature.bin文件中。

验证签名

  1. 提取签名中的摘要

    openssl pkeyutl -verify -in signature.bin -inkey public_key.pem -pubin -out verified_digest.bin
    

    这将从签名文件中提取摘要,并将其保存到verified_digest.bin文件中。

  2. 比较原始摘要和验证后的摘要

    diff digest.bin verified_digest.bin
    

    如果两个文件内容相同,则签名验证成功;否则,签名验证失败。

完整示例

假设我们有一个名为example.txt的文件,我们希望对其进行签名并验证签名。

  1. 生成密钥对

    openssl genpkey -algorithm RSA -out private_key.pem -aes256
    openssl rsa -in private_key.pem -pubout -out public_key.pem
    
  2. 对文件进行签名

    openssl dgst -sha256 -binary example.txt > digest.bin
    openssl pkeyutl -sign -in digest.bin -out signature.bin -inkey private_key.pem
    
  3. 验证签名

    openssl pkeyutl -verify -in signature.bin -inkey public_key.pem -pubin -out verified_digest.bin
    diff digest.bin verified_digest.bin
    

通过这些步骤,你可以在Linux上使用OpenSSL进行数字签名和验证。

0
看了该问题的人还看了