OpenSSL中⽂⼿册之命令⾏详解(未完待续)
  声明:OpenSSL之命令⾏详解是根据卢队长发布在的系列⽂章整理修改⽽成,我⾃⼰所做的⼯作主要是针对新的1.0.2版本进⾏验证,修改错别字,和错误,重新排版,以及整理分类,配图。未经作者允许,严禁⽤于商业出版,否则追究法律责任。⽹络转载请注明出处,这是对原创者的起码的尊重
1 标准命令
  查看帮助的办法:openssl 命令 -h。
命令功能备注证书类XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX===== req PKCS10 X.509证书签名请求(CSR)管理。申请证书x509X.509证书管理。显⽰证书信息、转换证书格式、签名证书请求及改变证书信任设置证书⼯具verify X.509证书验证。证书验证ca证书颁发机构(CA)管理。签发证书请求和⽣成CRL,维护⼀个已签发证书状态的⽂本数据库。证书中⼼crl证书撤销清单(CRL)管理。⼯具,⽤于处理PEM或DER格式的CRL⽂件证书吊销crl2pkcs7CRL到PKCS#7转换。根据CRL或者证书⽣成pkcs7消息;证书吊销对称加密*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*===== enc加密和解密对称加解密摘要*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*====
dgst消息摘要计算。摘要集合⾮对称XXXXXXXXX所有的⾮对称都可以使⽤pkey系列来操作,⿎励使⽤pkey系列XXXXXXX====== pkey公钥和私钥管理。⾮对称加密pkeyparam公钥算法参数管理。⾮对称加密pkeyutl公钥算法加密操作实⽤程序。⾮对称加密genpkey⽣成私钥或参数。⾮对称加密PKI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
pkcs7PKCS7加密消息语法,各种消息存放的格式标准;⽤于处理DER或者PEM格式的pkcs7⽂件消息格式pkcs8私钥转换⼯具,pkcs8格式转换证书pkcs12PKCS12数据管理。⼯具,⽤于⽣成和分析pkcs12⽂件个⼈证书⼯具XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX======= asn1parse解析ASN.1序列。⽤于诊断ASN.1结构的⼯具,也可从ASN.1数据中提取数据;诊断⼯具ciphers密码套件描述,显⽰⽀持的加密套件
cms CMS(加密消息语法)实⽤程序
engine引擎(loadble模块)信息和操纵。
errstr错误字符串转换的错误号。
nseq创建或检查netscape证书序列,多证书与netscape证书序列间相互转化序列转换ocsp在线证书状态协议实⽤程序。在线证书状态passwd⽣成散列密码。⽣成各种⼝令密⽂
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       #密码从⽂件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位密钥。
//加密(提供密钥)cipher命令
$openssl enc -aes-128-cbc -e -K 000 -iv 000 - -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 -out test.cipher  -a -A  -p
//解密
$openssl enc -aes-128-cbc -d  -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000in 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] []
-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”或类似程序在验证之前将⼗六进制签名转换为⼆进制签名。
例⼦

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。