配置 文件签名(要求证书字段).note
文件签名:不加密文件,用私钥签名,证明该文件的来源、防止文件被篡改,客户端用公钥验证
文件加密:加密文件,用公钥加密,只有拥有私钥的客户端才能解密并读取该文件# 有两种签名方式:
## 一般常用的都是分离签名
内嵌签名:文件内容和签名放在同一个文件里(普通程序可能无法正常读取)
分离签名:原文件不变,签名单独生成一个文件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不支持文件签名