配置 文件签名(要求证书字段).note

noteId: WEB1577577dd3503a7f5159ee99046c0273 · 原始路径:/ALL/Linux - A模块/服务配置/文件加密、文件签名(openssl、gpg、age)/配置 文件签名(要求证书字段).note · 图片:8 · 附件待处理:0

 
文件签名:不加密文件,用私钥签名,证明该文件的来源、防止文件被篡改,客户端用公钥验证
文件加密:加密文件,用公钥加密,只有拥有私钥的客户端才能解密并读取该文件
 
# 有两种签名方式:
## 一般常用的都是分离签名
内嵌签名:文件内容和签名放在同一个文件里(普通程序可能无法正常读取)
分离签名:原文件不变,签名单独生成一个文件
 
 
1、文件签名(openssl):
 
 
(1)生成openssl密钥(需要携带属性):
这个用于签名的证书字段必须为:emailProtection
# 生成私钥公钥:
/usr/lib/ssl/misc/CA.pl -newca
vim /etc/ssl/openssl.cnf
 
/usr/lib/ssl/misc/CA.pl -newreq-nodes
/usr/lib/ssl/misc/CA.pl -sign
 
 
(2)签名端(用私钥签名):
## 用 -nodetach 控制,不加该参数就是 分离签名,加了该参数就是 内嵌签名。
# 分离签名(单独生成一个签名文件):
openssl cms -sign -binary -md sha256 -in test.txt -out test.txt.sig -outform PEM -signer sign.crt -inkey sign.key
 
# 内嵌签名(原文中包含签名内容):
openssl cms -sign -binary -nodetach -md sha256 -in test.txt -out test.txt.sig -outform PEM -signer sign.crt -inkey sign.key
 
 
(3)验证端(用公钥验证):
# 验证分离签名:
## 需要用 -content 指定源文件
openssl cms -verify -binary -in test.txt.sig -inform PEM -content test.txt -CAfile sign.crt
 
# 验证并还原内嵌签名:
openssl cms -verify -binary -in test.txt.sig -inform PEM -CAfile sign.crt -out test.txt
 
 
2、文件签名(gpg):
 
(1)生成 gpg 密钥:
apt install -y gpg
 
gpg --full-generate-key
# 1
# 4096
# 0
# y
# gpg_cert    //CN名称
# O
输入密码
 
# 导出公钥:
gpg --armor --export gpg_cert > public.asc
 
# 导出私钥(私钥一般不需要导出):
gpg --armor --export-secret-keys gpg_cert > private.asc
 
scp public.asc root@192.168.10.2:~
导出公钥后,将公钥发送给验证方:
scp public.asc root@192.168.10.2:~
 
 
(2)签名端(用私钥签名):
# 分离签名:
gpg --detach-sign --output test.txt.sig test.txt
# 可选参数:--local-user gpg_cert(gpg密钥id)    //如果本地只有一个gpg密钥,就无需指定
 
# 内嵌签名:
gpg --sign --output test.txt.sig test.txt
 
 
(3)验证端(用公钥验证):
# 导入并信任公钥:
gpg --import public.asc
 
gpg --edit-key gpg_cert
# trust
# 5
# y
 
# 验证分离签名:
gpg --verify test.txt.sig test.txt
 
# 验证并还原内嵌签名:
gpg --output test.txt --decrypt test.txt.sig
 
 
 
·age不支持文件签名