一、OpenSSL命令工具应用
1.Linux系统加密解密基于协议的开源实现:OpenSSL(基于ssl)、GPG(基于pgp)
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
2.OpenSSL组成:
libencrypt库:加密解密协议; libssl库:实现SSL库;openssl:多用途命令行工具
libencrypt和bssl库为开发者开发实现库调用
3.OpenSSL命令组成:
标准命令、消息摘要命令(dgst子命令)、加密命令(enc子命令)
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam ec
ecparam enc engine errstr
gendh gendsa genpkey genrsa
nseq ocsp passwd pkcs12
pkcs7 pkcs8 pkey pkeyparam
pkeyutl prime rand req
rsa rsautl s_client s_server
s_time sess_id smime speed
spkac ts verify version
x509
Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160
sha sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-256-cbc camellia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des-ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea
idea-cbc idea-cfb idea-ecb idea-ofb
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb zlib
二、OpenSSL多用途命令行工具
1.OpenSSL完成对称加密:enc
支持的算法:3des, aes, blowfish, towfish
enc命令:
-:直接指明算法
-e:加密
-d:解密
-a:base64 process the data.Base64编码格式,不指明则为二进制编码格式
-salt:加密时加入杂质
-in:加密文件
-out:输出文件
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
2.OpenSSL完成单向加密
工具:openssl dgst, md5sum, sha1sum, sha224sum, …
生成方式不同,但是加密算法相同则生成的特征码相同
dgst命令:
~]# openssl dgst -md5 /PATH/TO/SOMEFILE
3.OpenSSL完成随机数生成
工具:openssl rand,默认生成二进制格式,每次生成不同
~]# openssl rand -hex NUM 采用十六进制编码
~]# openssl rand -base64 NUM 采用Base64编码格式
NUM:表示指明生成的随机数字的长度
Base64编码显示后"=="是其标准格式,真正使用时要去除
扩展:可以用一些命令如dd,从Linux系统上的随机数生成器读取随机数
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数(不安全),非阻塞;
熵池中随机数的来源:硬盘IO中断时间间隔;键盘IO中断时间间隔;
4.OpenSSL完成生成用户加密密码:
工具:passwd, openssl passwd
用法:openssl passwd -1 -salt SALT
1)-salt后面可以直接引用随机书生成
[root@localhost ~]# openssl passwd -1 -salt $(openssl rand -hex 5)
2)-后面能直接加算法,1表示passwd的加密算法为md5-base,可选项如下
3)密码相同时候,所加SALT只要有一点不同就会产生雪崩效应
5.OpenSSL完成公钥加密:
工具:openssl rsautl, gpg
加密解密算法:RSA,ELGamal
数字签名算法:RSA, DSA, ELGamal
密钥交换算法:DH
6.OpenSSL生成密钥对;genrsa
# openssl genrsa NUM -out FILE
-out FILE:指明保存文件
NUM一般为1024的倍数
注意:
生成的密钥对也可以使用输出重定向导出到指定文件,但时此时的文件权限要仅为自己可读可写
# (umask 077;openssl genrsa NUM -out FILE)
放在括号中的命令要放在子shell运行此进程,umask仅对子shell中的进程起作用,主进程无影响
7.OpenSSL提取公钥
[root@localhost tmp]# openssl rsa -in Key_FILE -pubout