欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

openssl命令使用

程序员文章站 2022-06-02 10:29:52
openssl openssl是个密码工具集,提供多端接口调用方式 对称加密 对称加密主要是用aes,des算法 需要注意的是解密不要在源文件操作,否则解密失败源文件也没有了 单向散列函数加密 使用最多的是sha256,sha512,hmac md5不再推荐使用,推荐使用sha 2 单向散列函数特点 ......

openssl

openssl是个密码工具集,提供多端接口调用方式

组成: 
  1. 代码库 libcryto ,libssl(ssl/tls)
  2. 工具集 openssl
 

对称加密

对称加密主要是用aes,des算法

需要注意的是解密不要在源文件操作,否则解密失败源文件也没有了

usage: enc -ciphername [-aadepp] [-base64] [-bufsize number] [-debug]
    [-in file] [-iv iv] [-k key] [-k password]
    [-kfile file] [-md digest] [-none] [-nopad] [-nosalt]
    [-out file] [-pass arg] [-s salt] [-salt]

-e 指定加密算法
-d 解密
-a 使用base64编码
-base64 使用base64解码
-in 要加密文件存放位置
-out 加密后的文件存放位置
-k 输入密码
-iv 输入一个向量

加密
 $ openssl enc -e aes-128-cbc -in secret.txt -out myaes128.txt
 
解密
 $ openssl enc -d aes-128-cbc -in myaes128.txt -out

单向散列函数加密

使用最多的是sha256,sha512,hmac

md5不再推荐使用,推荐使用sha-2

单向散列函数特点

1.输出值的数据长度不变
2.相同的输入输出也必定相同
3.输入相似的数据,输出也大不相同
4.输入完全不同的数据,输出相同的哈希值会以极低的概率出现

单向散列函数的使用

openssl dgst 
options are
-c              to output the digest with separating colons
-r              to output the digest in coreutils format
-d              to output debug info
-hex            output as hex dump
-binary         output in binary form
-hmac arg       set the hmac key to arg
-verify file    verify a signature using public key in file
-prverify file  verify a signature using private key in file
-keyform arg    key file format (pem or engine)
-out filename   output to filename rather than stdout
-signature file signature to verify
-sigopt nm:v    signature parameter
-hmac key       create hashed mac with key
-mac algorithm  create mac (not neccessarily hmac)
-md4            to use the md4 message digest algorithm
-md5            to use the md5 message digest algorithm
-ripemd160      to use the ripemd160 message digest algorithm
-sha            to use the sha message digest algorithm
-sha1           to use the sha1 message digest algorithm
-sha224         to use the sha224 message digest algorithm
-sha256         to use the sha256 message digest algorithm
-sha384         to use the sha384 message digest algorithm
-sha512         to use the sha512 message 

$ cat test.txt | openssl dgst -sha256 -hex -out hash.txt

生成随机数

随机数的作用

1. 生成密钥: 用于对称密码和消息认证码
2. 生成密钥对:用于公钥密码和数字签名
3. 生成初始化向量(iv):用于分组密码的cbc,cfb和ofb模式
4. 生成nonce, 用于防御重放攻击以及分组密码的ctr模式等
5. 生成盐,用于基于口令的密码(pbe)等

生成随机数

openssl rand [option] 字节数
where options are
-out file             - write to file
-engine e             - use engine e, possibly a hardware device.
-rand file:file:... - seed prng from files
-base64               - base64 encode output
-hex                  - hex encode output

$ openssl rand -hex 1
$ openssl rand -base64 10 -out a.txt

生成口令密钥

一般基于口令的密钥为了防止字典攻击会使用一串随机数加入单向散列函数

openssl passwd
usage: passwd [options] [passwords]
where options are
-crypt             standard unix password algorithm (default)
-1                 md5-based password algorithm
-apr1              md5-based password algorithm, apache variant
-salt string       use provided salt
-in file           read passwords from file
-stdin             read passwords from stdin
-noverify          never verify when reading password from terminal
-quiet             no warnings
-table             format output as table
-reverse           switch table columns

$ openssl passwd -salt 123

生成密钥对

首先使用genrsa生成私钥,然后在使用rsa从私钥中提取公钥

openssl genrsa
usage: genrsa [args] [numbits]
 -des            encrypt the generated key with des in cbc mode
 -des3           encrypt the generated key with des in ede cbc mode (168 bit key)
 -idea           encrypt the generated key with idea in cbc mode
 -seed
                 encrypt pem output with cbc seed
 -aes128, -aes192, -aes256
                 encrypt pem output with cbc aes
 -camellia128, -camellia192, -camellia256
                 encrypt pem output with cbc camellia
 -out file       output the key to 'file
 -passout arg    output file pass phrase source
 -f4             use f4 (0x10001) for the e value
 -3              use 3 for the e value
 -engine e       use engine e, possibly a hardware device.
 
 $ openssl genrsa -out rsa.key 2048
 //生成公钥
 $ openssl rsa -in rsa.key -pubout -out rsa-public.key

证书

对证书所发布的公钥进行权威的认证,证书可以有效的避免中间人攻击的问题

1. pkc:public-key certificate,公钥证书,简称证书。
2. ca:certification authority,认证机构。对证书进行管理,负责 1.生成密钥对、2. 注册公钥时对身份进行认证、3. 颁发证书、4. 作废证书。其中负责注册公钥和身份认证的,称为 ra(registration authority 注册机构)
3. pki:public-key infrastructure,公钥基础设施,是为了更高效地运用公钥而制定的一系列规范和规格的总称。比较著名的有pkcs(public-key cryptography standards,公钥密码标准,由 rsa 公司制定)、x.509 等。pki 是由使用者、认证机构 ca、仓库(保存证书的数据库)组成。
crl:certificate revocation list 证书作废清单,是 ca 宣布作废的证书一览表,会带有 ca 的数字签名。一般由处理证书的软件更新 crl 表,并查询证书是否有效。
4.证书的编码格式:pem,der

证书的申请签署步骤

openssl命令使用

1. 生成申请请求
2. ra验证
3. ca签署
4. 获取证书

(1)创建所需要的文件
touch /etc/pki/ca/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/ca/serial 指定第一个颁发证书的序列号

(2)ca自签证书
  (1)生成私钥
    cd /etc/pki/ca/
    (umask 066; openssl genrsa -out
   /etc/pki/ca/private/cakey.pem 2048)
  (2)生成自签名证书
    openssl req -new -x509 –key
    /etc/pki/ca/private/cakey.pem -days 7300 -out
    /etc/pki/ca/cacert.pem
    -new: 生成新证书签署请求
    -x509: 专用于ca生成自签证书
    -key: 生成请求时用到的私钥文件
    -days n:证书的有效期限
    -out /path/to/somecertfile: 证书的保存路径

(3)颁发证书
a 在需要使用证书的主机生成证书请求
给web服务器生成私钥
(umask 066; openssl genrsa -out
/etc/pki/tls/private/test.key 2048)
生成证书申请文件
openssl req -new -key /etc/pki/tls/private/test.key
-days 365 -out etc/pki/tls/test.csr
b 将证书请求文件传输给ca
c ca签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr –out
/etc/pki/ca/certs/test.crt -days 365
注意:默认国家,省,公司名称三项必须和ca一致
d 查看证书中的信息:
openssl x509 -in /path/from/cert_file -noout
-text|issuer|subject|serial|dates
openssl ca -status serial 查看指定编号的证书状态

(4) 吊销证书

a 在客户端获取要吊销的证书的serial
openssl x509 -in /path/from/cert_file -noout
-serial -subject
b 在ca上,根据客户提交的serial与subject信息,对比检验是
否与index.txt文件中的信息一致,吊销证书:
openssl ca -revoke /etc/pki/ca/newcerts/serial.pem
c 指定第一个吊销证书的编号
注意:第一次更新证书吊销列表前,才需要执行
echo 01 > /etc/pki/ca/crlnumber
d 更新证书吊销列表
openssl ca -gencrl -out /etc/pki/ca/crl/crl.pem
查看crl文件:
openssl crl -in /etc/pki/ca/crl/crl.pem -noout -text