RPM验签
概述
openEuler当前采用RPM格式的软件包管理,RPM采用符合openPGP签名规范,openEuler-24.03-LTS-SP1版本发布的RPM软件在开源版本的基础上增加了对SM2/3算法的签名/验签功能支持。
对如下软件包进行商密使能:
- GnuPG:gpg命令行应用程序支持生成国密签名
- RPM:支持调用gpg命令以及openSSL API实现国密签名生成/验证
- openSSL:支持国密签名验证(开源已支持)
前置条件
openEuler操作系统安装的gnupg2、libgcrypt、rpm软件版本号需大于等于如下版本:
$ rpm -qa libgcrypt libgcrypt-1.10.2-3.oe2403sp1.x86_64 $ rpm -qa gnupg2 gnupg2-2.4.3-5.oe2403sp1.x86_64 $ rpm -qa rpm rpm-4.18.2-20.oe2403sp1.x86_64
ecdsa的签名及验签仅支持sm2的
使用方法
生成秘钥
方法1:
$ gpg --full-generate-key --expert
方法2:
$ gpg --quick-generate-key <密钥标识> sm2p256v1
中间会要求输入密码,后续操作秘钥或签名需要输入密码,若直接不输入,按回车,则表示无密码。
导出证书
$ gpg -o <证书路径> --export <密钥标识>
打开配置sm3哈希算法和sm2算法的宏
$ vim /usr/lib/rpm/macros %_enable_sm2p256v1_sm3_algo 1
将证书导入rpm数据库
$ rpm --import <证书路径>
编写签名所需的macro
$ vim ~/.rpmmacros %_signature gpg %_gpg_path /root/.gnupg %_gpg_name <密钥标识> %_gpgbin /usr/bin/gpg2 %__gpg_sign_cmd %{shescape:%{__gpg}} \ gpg --no-verbose --no-armor --no-secmem-warning --passphrase-file /root/passwd \ %{?_gpg_digest_algo:--digest-algo=%{_gpg_digest_algo}} \ %{?_gpg_sign_cmd_extra_args} \ %{?_gpg_name:-u %{shescape:%{_gpg_name}}} \ -sbo %{shescape:%{?__signature_filename}} \ %{?__plaintext_filename:-- %{shescape:%{__plaintext_filename}}}
其中%__gpg_sign_cmd信息为默认信息加上了--passphrase-file /root/passwd,passwd文件存的是密码,若步骤1没有设置密码,则无需添加。
生成RPM包签名
$ rpmsign --addsign <RPM文件>
验证RPM包签名
$ rpm -Kv <RPM文件>
如果输出中显示“Header V4 ECDSA/SM3 Signature”,并且显示“OK”,则说明签名验证成功。
文档捉虫