声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己所做的工作主要是针对新的1.0.2版本进行验证,修改错别字,和错误,重新排版,以及整理分类,配图。 未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!
1 标准命令
查看帮助的办法:openssl 命令 -h
。
命令 | 功能 | 备注 |
---|---|---|
证书类 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ===== |
req | PKCS10 X.509证书签名请求(CSR)管理。 | 申请证书 |
x509 | X.509证书管理。显示证书信息、转换证书格式、签名证书请求及改变证书信任设置 | 证书工具 |
verify | X.509证书验证。 | 证书验证 |
ca | 证书颁发机构(CA)管理。签发证书请求和生成CRL,维护一个已签发证书状态的文本数据库。 | 证书中心 |
crl | 证书撤销清单(CRL)管理。工具,用于处理PEM或DER格式的CRL文件 | 证书吊销 |
crl2pkcs7 | CRL到PKCS#7转换。根据CRL或者证书生成pkcs7消息; | 证书吊销 |
对称加密 | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX* | ===== |
enc | 加密和解密 | 对称加解密 |
摘要 | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX* | ==== |
dgst | 消息摘要计算。 | 摘要集合 |
非对称 | XXXXXXXXX所有的非对称都可以使用pkey系列来操作,鼓励使用pkey系列XXXXXXX | ====== |
pkey | 公钥和私钥管理。 | 非对称加密 |
pkeyparam | 公钥算法参数管理。 | 非对称加密 |
pkeyutl | 公钥算法加密操作实用程序。 | 非对称加密 |
genpkey | 生成私钥或参数。 | 非对称加密 |
PKI | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
pkcs7 | PKCS7加密消息语法,各种消息存放的格式标准;用于处理DER或者PEM格式的pkcs7文件 | 消息格式 |
pkcs8 | 私钥转换工具,pkcs8格式 | 转换证书 |
pkcs12 | PKCS12数据管理。工具,用于生成和分析pkcs12文件 | 个人证书 |
工具 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ======= |
asn1parse | 解析ASN.1序列。用于诊断ASN.1结构的工具,也可从ASN.1数据中提取数据; | 诊断工具 |
ciphers | 密码套件描述,显示支持的加密套件 | |
cms | CMS(加密消息语法)实用程序 | |
engine | 引擎(loadble模块)信息和操纵。 | |
errstr | 错误字符串转换的错误号。 | |
nseq | 创建或检查netscape证书序列,多证书与netscape证书序列间相互转化 | 序列转换 |
ocsp | 在线证书状态协议实用程序。 | 在线证书状态 |
passwd | 生成散列密码。生成各种口令密文 | |
prime | 检查一个数是否是素数 | |
rand | 生成伪随机字节。 | |
smime | S / MIME邮件处理。处理S/MIME邮件,加密、解密、签名和验证 | 邮件验证工具 |
speed | 算法速度测量。,调整测试库的性能 | 性能工具 |
s_time | SSL连接定时器。提供的SSL/TLS性能测试工具,测试服务 | 性能工具 |
spkac | SPKAC打印和生成实用程序 | |
ts | 时间戳机构工具(客户端/服务器) | |
sess_id | SSL会话数据管理。SSL/TLS协议的session处理工具 | 协议会话工具 |
s_client | 这将实现一个通用SSL / TLS客户端,可以建立与远程服务器的SSL / TLS透明连接。 | 协议会话工具 |
s_server | 这实现了一个通用SSL / TLS服务器,它接受来自远程客户端的SSL / TLS连接。 | 协议会话工具 |
version | OpenSSL版本信息。 | |
===========全部已经时的禁止再使用,主要为了兼容=================== | ||
ec | EC(椭圆曲线)密钥处理,用于数字签名和加密 | ecc算法 |
ecparam | EC参数的操作和生成,产生ECC密钥对。用于数字签名和加密 | ecc算法 |
dh算法 | ||
dh算法 | ||
dh算法 | ||
rsa算法 | ||
rsa | RSA密钥管理。处理RSA密钥、格式转换和打印信息 | rsa算法 |
rsa算法 | ||
dsa | DSA数据管理。处理DSA密钥、格式转换和打印信息,用于数字签名 | dsa算法 |
dsa算法 | ||
dsa算法 |
2 命令详解
2.1 enc
对称加密算法工具。它能够运用块或者流算法对数据加/解密。还能够把加密/接密,还可以把结果进行base64编码。
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A]
[-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p]
[-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
- -in filename —— 输入文件
- -out filename ——输出文件,省略则为标准输出
- -pass arg —— 口令设置,用于没有提供密钥时,采用摘要算法从口令中生成一个密钥,如果加密时使用了口令,则解密也要使用口令,arg如下所示:
-pass pass:"123" #密码是123
-pass pass:123 #密码是123
-pass evn:VAR #密码从环境变量VAR中去
-pass file:p.txt #密码从文件p.txt第一行取,不包括换行符,注意DOS格式的^M及回车符。
-pass fd:3 #密码从文件描述符3中读
-pass stdin #标准输入
- -e —— 加密,二选一
- -d —— 解密,二选一
- -a/-base64 —— 加密时设置结果以base64编码,,解密时设置输入为base64
- -A ——加密时设置结果以base64编码成一行,解密时设置输入为一行base64
-k password—— 口令,已经被-pass代替,二选一-kfile filename] —— 口令文件 已经被-pass代替,二选一- -K key —— 加密秘钥,16进制
- -iv IV ——初始向量,16进制
- -S salt ——指定16进制盐值
- -salt ——带有随机盐值 二选一
-nosalt ——不带盐值,已经关闭此选项,二选一- -z ——是否压缩,需要编译时选择了zlib库
- -md digstname —— 摘要算法,当没有提供密钥时候,用于从口令中生成一个密钥,默认md5
- -p ——打印出使用的salt、口令以及初始化向量IV。二选一
- -P ——打印出使用的salt、口令以及初始化向量IV。不做加解密,二选一
- -bufsize number ——缓冲区大小
- -nopad ——无填充
- -debug ——打印调试信息
- -none ——不执行加 解密
- -engine id ——引擎
- -cihername ——要使用的加密算法,支持的加密算法如下
-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cbc-hmac-sha256
-aes-128-ccm -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-cbc -aes-192-ccm -aes-192-cfb
-aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr
-aes-192-ecb -aes-192-gcm -aes-192-ofb
-aes-256-cbc -aes-256-cbc-hmac-sha1 -aes-256-cbc-hmac-sha256
-aes-256-ccm -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ctr -aes-256-ecb
-aes-256-gcm -aes-256-ofb -aes-256-xts
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1
-camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -id-aes128-CCM
-id-aes128-GCM -id-aes128-wrap -id-aes192-CCM
-id-aes192-GCM -id-aes192-wrap -id-aes256-CCM
-id-aes256-GCM -id-aes256-wrap -id-smime-alg-CMS3DESwrap
-rc2 -rc2-40-cbc -rc2-64-cbc
-rc2-cbc -rc2-cfb -rc2-ecb
-rc2-ofb -rc4 -rc4-40
-rc4-hmac-md5 -seed -seed-cbc
-seed-cfb -seed-ecb -seed-ofb
- 注意:
- 该程序可以通过openssl ciphername或者openssl enc -ciphername 两种方式调用,但是前一种不支持引擎加密.
- 应在配置文件中配置提供全新加密算法的引擎(如提供gost89算法的ccgost引擎)。在命令行中使用-engine选项指定的引擎只能用于由配置文件中指定的OpenSSL内核或其他引擎支持的密码的硬件辅助实现。
- 当enc命令列出支持的加密算法时,也列出了配置文件中指定的引擎提供的算法。
- 如果需要,将提示输入密钥以获得密钥。
- 如果从密码派生密钥,则应使用-salt选项,除非您希望与以前版本的OpenSSL和SSLeay兼容。没有-salt选项,可以对密码执行有效的字典攻击,并攻击流密码加密数据。原因是没有slat,相同的密码总是生成相同的加密密钥。当slat被使用时,加密数据的前八个字节被保留给盐:它在加密文件时被随机生成,并且在被解密时从加密文件读取。
- 一些密码没有大的密钥,如果不正确使用,会带来安全隐患。建议初学者在CBC模式下使用强分组密码,如bf或des3。
- 所有块密码通常使用PKCS#5填充也称为标准块填充:这允许执行基本的完整性或密码检查。然而,由于随机数据通过测试的机会优于256中的1,这不是一个非常好的测试。
- 如果禁止填充,则输入数据必须是密码块长度的倍数。
- 所有RC2密码具有相同的密钥和有效的密钥长度。
- Blowfish和RC5算法使用128位密钥。
//加密(提供密钥)
$openssl enc -aes-128-cbc -e -K 000 -iv 000 -in test.txt -out test.cipher -a -A -p
//解密
$openssl enc -aes-128-cbc -d -K 000 -iv 000 -in test.ciphet -a -A -out test.plain -p
//加密(提供口令)
$openssl enc -aes-128-cbc -e -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.txt -out test.cipher -a -A -p
//解密
$openssl enc -aes-128-cbc -d -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.cipher -out test.plain -a -A -p
2.2 dgst
主要用于数据摘要。它也可以用于数据签名以及验证签名
openssl dgst [-sha|-sha1|-mdc2|-ripemd160|-sha224|-sha256|-sha384|-sha512|-md2|-md4|-md5|-dss1] [-c] [-d] [-hex] [-binary]
[-r][-non-fips-allow] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename]
[-signature filename] [-hmac key] [-non-fips-allow] [-fips-fingerprint] [file...]
- -sha|-sha1|-mdc2|-ripemd160|-sha224|-sha256|-sha384|-sha512|-md2|-md4|-md5|-dss1 摘要算法,多选一
- -c ——当设置了-hex,输出结果每两个字符中加一个冒号
- -d ——打印出BIO调试信息值。
- -hex ——以十六进输出结果,二选一
- -binary ——以二进制输出结果,二选一
- -r —— 以sha1sum的“coreutils”格式输出摘要
- -non-fips-allow —— 允许在FIPS模式使用非FIPS算法
- -out filename—— 输出文件,默认标准输出
- -sign filename—— 使用文件中的私钥签名
- -keyform arg —— 私钥格式,PEM | DER
- -passin arg—— 私钥密码
- -verify filename ——公钥验签
- -prverify filename ——私钥验签
- -signature filename ——签名文件
- -hmac key ——hmac 秘钥
- -non-fips-allow ——允许在FIPS模式使用非FIPS算法
- -fips-fingerprint ——在某些openssl——FIPS中使用特殊密钥计算HMAC
- file ——输入文件
注意
- 所有新应用程序的选择的摘要算法是SHA1。 然而其他摘要算法仍然被广泛使用。
- 在签名时,dgst将根据私钥的ASN.1信息自动确定用于签名的算法(RSA,ECC等)。
当验证签名时,它只处理RSA,DSA或ECDSA签名本身,而不是分析相关数据来识别签名者和相关算法,如x.509,CMS和S / MIME的签名者和算法。 - 某些签名算法,特别是ECDSA和DSA需要一个随机数源。
- 仅当单个文件要签名或验证时,才能使用签名和验证选项。
- 十六进制签名无法使用openssl进行验证。使用“xxd -r”或类似程序在验证之前将十六进制签名转换为二进制签名。
例子
//计算摘要
$openssl dgst -sh1 -c -hex -out md.sha1 test.txt
//私钥签名
$ openssl dgst -sign rsa_pri.key -keyform PEM -passin pass:123456 -out rsa_sign.sig test.txt