OpenSSL中文手册之命令行详解(未完待续)

本文详细介绍了OpenSSL命令行工具的使用,包括enc命令用于对称加密,dgst命令用于数据摘要,非对称加密的pkey系列命令,证书处理的req、x509、verify命令,以及PKI相关的pkeyutl、pkcs7、pkcs8、pkcs12等。内容涵盖了各种加密算法、摘要算法、密钥生成与管理,以及证书签名和验证等操作。
摘要由CSDN通过智能技术生成

  声明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 Diffie-Hellman参数管理。被dhparam淘汰了 dh算法
gendh 生成Diffie-Hellman参数。被dhparam淘汰了 dh算法
dhparam 生成和管理Diffie-Hellman参数。被genpkey和pkeyparam取代 dh算法
genrsa 生成RSA私钥。由genpkey取代 rsa算法
rsa RSA密钥管理。处理RSA密钥、格式转换和打印信息 rsa算法
rsautl RSA实用程序用于签名,验证,加密和解密。取而代之的是pkeyutl rsa算法
dsa DSA数据管理。处理DSA密钥、格式转换和打印信息,用于数字签名 dsa算法
dsaparam DSA参数生成与管理。用于生成和操作dsa证书参数,用于数字签名,被genpkey和pkeyparam取代 dsa算法
gendsa 从参数生成DSA私钥。生成DSA密钥,密钥参数用dsaparam生成,用于数字签名,由genpkey和pkey取代 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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝月心语

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值