【密码学实战】openHiTLS genrsa命令行:RSA私钥生成专属工具

hitls genrsa 是 openHiTLS 加密工具集的核心子命令,专门用于生成 RSA 非对称密钥对 (私钥为主,公钥内嵌于私钥文件)。所有功能围绕 "合规性" 与 "安全性" 设计,需通过 hitls 主程序调用,以下为精简实用的完整指南

一、工具核心概述

1. 定位与核心能力

**hitls genrsa**不是独立工具,而是 openHiTLS 工具集的 "密钥生成模块",核心能力聚焦两点:

  • 生成指定长度的 RSA 密钥对(仅支持 1024/2048/3072/4096 位);
  • 用对称算法 + 密码加密私钥(仅输出 PKCS8 加密 PEM 格式,不支持裸私钥)。

二、基本语法

1. 完整命令格式

cpp 复制代码
hitls genrsa [选项] <RSA密钥长度>  # 密钥长度必须在最后,选项顺序可调整

2. 命令构成说明

组成部分 作用 示例值
hitls 主程序入口(固定)
genrsa 子命令(固定)
[选项] 配置项(如输出路径) --cipher sm4-cbc
<密钥长度> 必填尾部参数 2048/4096

3. 语法注意事项

  • 选项区分大小写:仅支持小写(如 --help 而非 --Help),大写会报 "未知选项";
  • 空格分隔:选项与值之间必须用空格(如 --cipher aes128-cbc 不可写 --cipher=aes128-cbc);
  • 路径格式:Windows 下支持 ./keys/priv.pem.\keys\priv.pem,Linux 仅支持 / 分隔。

三、选项详细说明

hitls genrsa 仅支持 3 个核心选项,无隐藏功能,以下为完整说明:

选项名 数据类型 功能说明 是否必填 关键使用注意点
--help 无参数 输出帮助信息(含支持的算法、密钥长度),执行后退出,不生成密钥。 首次使用建议先执行 hitls genrsa --help,确认本地工具参数与文档一致。
--cipher 字符串(算法名) 指定加密私钥的对称算法,需从预设列表选择)。 1. 国密场景选 sm4-cbc/sm4-xts;2. 跨平台场景选 aes256-cbc/aes128-cbc;3. 输入错误会自动打印支持列表。
--out 字符串(文件路径) 指定私钥输出路径,默认输出到终端(stdout)。 1. 路径长度≤4096 字符(超长报错);2. 已存在文件会直接覆盖(需提前备份);3. 父目录需有写入权限(否则报 "Failed to set outfile mode")。

四、关键参数范围(必看)

1. 支持的对称加密算法(--cipher 可选值)

工具仅支持 15 种算法,分 AES 与 SM4 系列,按场景分类如下:

算法系列 支持的完整算法名 适用场景
AES 系列 aes128-cbc、aes192-cbc、aes256-cbc 跨平台兼容(如 Linux/Windows 交互)
AES 系列 aes128-cfb、aes192-cfb、aes256-cfb 低延迟场景(如实时加密)
AES 系列 aes128-ofb、aes192-ofb、aes256-ofb 抗 IV 重用风险
AES 系列 aes128-xts、aes256-xts 块设备存储(如 SSD 私钥文件)
SM4 系列 sm4-cbc、sm4-cfb、sm4-ofb、sm4-xts 国密合规场景(政务、金融)

2. RSA 密钥长度选择指南(尾部参数)

密钥长度直接影响安全与性能,仅支持 4 个固定值,场景适配如下:

支持长度 安全级别 性能消耗(相对值) 推荐场景 不推荐场景
1024 弱安全(仅测试用) 1x(最快) 功能验证、临时演示环境 生产环境、敏感数据加密
2048 中安全(NIST 推荐至 2030) 3x(较慢) 常规生产(Web 服务 HTTPS、API 签名) 超高安全需求(如金融核心交易)
3072 高安全(NIST 推荐至 2050) 8x(慢) 敏感场景(金融转账、政务数据) 高并发场景(如秒杀活动)
4096 极高安全(抗量子潜力) 20x(最慢) 核心密钥(CA 根证书、KMS 系统) 资源受限设备(嵌入式终端)

3. 密码隐性规则

工具通过 HITLS_APP_CheckPasswd 校验密码,不满足会报错退出,规则如下:

  • 长度:≥8 位(最大 64 位);
  • 复杂度:至少含 2 种字符类型(如字母 + 数字、字母 + 特殊符号);
  • 输入方式:终端隐藏输入(不显示字符,避免偷窥)。

五、典型使用示例(可直接复制)

以下示例覆盖 "测试、生产、合规、管道传递" 四大核心场景,复制后可直接执行。

示例 1:测试场景(1024 位密钥,临时文件)

场景:验证工具可用性,生成临时测试私钥,用完可删除。

cpp 复制代码
# 1. 创建临时目录(避免污染当前目录)
mkdir -p ./tmp_test && cd ./tmp_test
# 2. 生成 1024 位私钥,aes128-cbc 加密,输出到 test_rsa.pem
hitls genrsa --cipher aes128-cbc --out test_rsa.pem 1024
# 3. 输入密码(示例:Test@1234,按提示输入)
# 4. 验证生成结果(查看文件是否存在)
ls -l test_rsa.pem
# 5. 测试完成后清理(可选)
cd .. && rm -rf ./tmp_test

示例 2:生产场景(2048 位密钥,安全存储)

场景:为 Web 服务生成 HTTPS 私钥,存储到专用目录并控制权限。

cpp 复制代码
# 1. 创建密钥专用目录(权限 700,仅所有者可访问)
mkdir -p /etc/hitls/keys && chmod 700 /etc/hitls/keys
# 2. 生成 2048 位私钥,aes256-cbc 加密,输出到安全路径
hitls genrsa --cipher aes256-cbc --out /etc/hitls/keys/web_rsa.pem 2048
# 3. 输入高强度密码(示例:WebRsa@2024!,建议存密码管理器)
# 4. 设置私钥权限(600,仅所有者可读写)
chmod 600 /etc/hitls/keys/web_rsa.pem
# 5. 验证权限与格式
ls -l /etc/hitls/keys/web_rsa.pem  # 应显示 -rw-------
file /etc/hitls/keys/web_rsa.pem   # 应显示"PEM encrypted private key"

示例 3:国密合规场景(3072 位密钥,SM4 加密)

场景:政务系统生成符合国密标准的私钥,用于电子公文加密。

cpp 复制代码
# 1. 创建合规目录(如 /opt/gov_secure,需提前授权)
mkdir -p /opt/gov_secure && chmod 700 /opt/gov_secure
# 2. 生成 3072 位私钥,sm4-cbc 加密,输出到合规路径
hitls genrsa --cipher sm4-cbc --out /opt/gov_secure/rsa_gov.pem 3072
# 3. 输入密码(需符合政务规范,如长度≥12位:GovRsa@2024!#)
# 4. 验证算法合规性(后续可提取公钥用于公文加密)
hitls rsa -in /opt/gov_secure/rsa_gov.pem -pubout -out /opt/gov_secure/rsa_gov_pub.pem

示例 4:管道传递(不落地存储私钥)

场景:生成私钥后直接提取公钥,避免私钥文件落地,提升安全性。

cpp 复制代码
# 生成 2048 位私钥(输出到 stdout),管道传递给 hitls rsa 提取公钥
hitls genrsa --cipher aes128-cbc 2048 | hitls rsa -pubout --out rsa_pub.pem
# 输入私钥密码(用于解密私钥以提取公钥)
# 验证公钥(查看公钥格式)
cat rsa_pub.pem  # 应显示"-----BEGIN PUBLIC KEY-----"

六、常见错误与排查(快速解决)

  1. 命令路径错误:genrsa: command not found
  • 原因 :未加 hitls 前缀,或 hitls 未安装 / 未在 PATH 中。
  • 解决
    1. 确认命令格式:必须写 hitls genrsa,而非单独 genrsa
    2. 检查 hitls 安装:执行 which hitls,无输出则重新安装 openHiTLS。

2. 密钥长度错误:The RSA key length is error...

  • 原因:尾部参数不在 1024/2048/3072/4096 范围内(如输入 1536)。
  • 解决
    1. 修正尾部参数为 4 个支持值之一;
    2. 执行 hitls genrsa --help 确认支持的长度列表。

3. 文件 IO 错误:Failed to set outfile mode.

  • 原因:路径不存在、无写入权限或磁盘空间不足。
  • 解决
    1. 检查路径是否存在:如 ls -d /opt/keys,不存在则执行 mkdir -p /opt/keys
    2. 检查权限:如 ls -ld /opt/keys,确保当前用户有 w 权限(可临时加权限:chmod +w /opt/keys);
    3. 检查磁盘空间:执行 df -h,确保剩余空间≥10KB(私钥文件很小)。

4. 加密模块错误:Encode failed.

  • 原因:系统熵源不足(随机数生成失败)。
  • 解决
    1. 检查熵源:执行 cat /proc/sys/kernel/random/entropy_avail,值<100 需补充;
    2. 临时补充熵源:执行 cat /dev/urandom > /dev/random &(后台运行,不影响其他操作);
    3. 永久补充:安装 rng-tools(CentOS:yum install rng-tools;Ubuntu:apt install rng-tools),安装后启动服务:systemctl start rngd

5. 密码错误:password error

  • 原因 :密码长度<8 位或复杂度不足(未通过 HITLS_APP_CheckPasswd 校验)。
  • 解决
    1. 确保密码长度≥8 位;
    2. 增加复杂度:如 RsaPass@2024(字母 + 数字 + 特殊符号);
    3. 重新输入时避免空格或不可见字符。

七、安全最佳实践(精简版)

1. 私钥存储与备份

  • 密码单独存:加密私钥的密码不要与私钥文件存在同一位置,建议用硬件密码管理器存储;
  • 加密备份:私钥备份时需加密(如 zip -e rsa_backup.zip rsa.pem),备份至少 2 份,存不同物理位置;
  • 权限控制:私钥文件权限固定为 600(chmod 600 rsa.pem),目录权限固定为 700(chmod 700 /etc/hitls/keys)。

2. 密钥生命周期管理

  • 定期轮换:生产环境私钥每 1-2 年轮换一次(用 hitls genrsa 生成新密钥,替换旧密钥后销毁旧密钥);
  • 安全销毁:旧私钥用 shred -u rsa_old.pem 彻底删除(多次覆盖内容,防止恢复),备份介质同步销毁。

3. 性能优化(针对 3072/4096 位密钥)

  • 提前补熵:生成高长度密钥前,先执行 rngd -r /dev/urandom 填充熵源,缩短生成时间;
  • 错峰执行:3072/4096 位密钥生成耗 CPU(持续 3-20 秒),建议在系统低负载时段(如凌晨)执行。

八、常用关联命令(后续操作)

生成私钥后,常用 openHiTLS 命令如下,可直接复制使用:

需求 关联命令
提取公钥 hitls rsa -in /etc/hitls/keys/web_rsa.pem -pubout -out web_rsa_pub.pem
用私钥签名文件 hitls sign -in data.txt -out data.sig -key web_rsa.pem -alg sha256
用公钥验证签名 hitls verify -in data.txt -sig data.sig -key web_rsa_pub.pem -alg sha256

免费下载openHiTLS

1、下载相关代码

2、构建安装,在openHiTLS根路径下执行以下命令:

cpp 复制代码
mkdir build
cd build
cmake ..
make && make install
相关推荐
openHiTLS密码开源社区15 小时前
【密码学实战】openHiTLS genpkey命令行:生成 RSA/EC密钥的正确姿势
rsa·公钥·私钥·openhitls·ec·密码算法·genpkey
openHiTLS密码开源社区3 天前
【密码学实战】openHiTLS enc命令行:数据加解密
aes·sm4·数据加解密·大文件加密·网络流加密
openHiTLS密码开源社区5 天前
【密码学实战】openHiTLS X509命令行工具: 数字证书生成与转换
https·数字证书·x509·csr·公钥·私钥·自签名
Humbunklung8 天前
填坑:VC++ 采用OpenSSL 3.0接口方式生成RSA密钥
开发语言·c++·rsa·openssl 3.0
Humbunklung9 天前
C# 使用应用RSA和ECC进行数字签名和签名验证
开发语言·c#·rsa·ecc
openHiTLS密码开源社区9 天前
白盒密码:守护不可信环境中的密钥安全
物联网·aes·白盒密码·数字版权·密钥算法融合·不可信环境·轻量级安全
一只游鱼14 天前
RSA非对称加密
非对称加密·rsa
qqxhb24 天前
系统架构设计师备考第20天——信息加解密技术&密钥管理技术
系统架构·des·aes·加解密·rsa·密钥管理·kdc
bkspiderx1 个月前
安全扫描:目标主机支持RSA密钥交换问题
网络·nginx·安全·tls·rsa·弱算法