前言:对称加密解密命令行工具,单向加密工具,生成密钥对工具
OpenSSL:
组件:libcrypto库,libssl库主要有开发人员使用。
openssl:多用途命令行工具。
openssl命令:
命令主要分为三类:
(1)标准命令 :
(2)消息摘要命令(dgst子命令):
(3)加密命令(enc子命令):
对称加密的工具:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-salt] [-a]
-cirphername:表示要使用的加密算法
-in filename:表示要加密的文件
-out filename:表示加密后输出的文件
-pass arg:表示加密时使用的密码
-e:表示加密
-d:表示解密
-salt:表示在加密后掺入杂质
-a:表示文本格式编码,不加-a表示二进制格式编码
复制文件/etc/fstab到当前目录并对它进行加密:
[root@Tzz ~]# openssl enc -e -des3 -a -salt -in fstab -out fatab.cirphertext enter des-ede3-cbc encryption password:
系统会提示你输入密码。
加密后的结果:
之后再对它解密:
[root@Tzz ~]# openssl enc -d -des3 -a -out fstab -in fatab.cirphertext enter des-ede3-cbc decryption password:
单向加密工具:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] /PATH/TO/SOMEFILE
提取fstab文件的特征码:
[root@Tzz ~]# openssl dgst -md5 fstab MD5(fstab)= b56aba6febb1a5c74a4664f34a6b2a56
生成用户密码工具:
openssl passwd [-1] [-salt string](我们可以生成随机数当成杂质掺入密码)
[root@Tzz ~]# openssl passwd -1 -salt 12345 Password: $1$12345$nbKSwtiwEKb8OtTPKCO1J0
生成随机数工具:
openssl rand [-base64] [-hex] num
[-hex]:生成十六进制编码格式随机数
[-base64]:生成base64编码格式随机数
[root@Tzz ~]# openssl rand -base64 10 zA0wV94TMnOyuQ==
[root@Tzz ~]# openssl rand -hex 10 7266f7ed0539a2b28f4c
基于随机数生成密码:
[root@Tzz ~]# openssl passwd -1 -salt `openssl rand -hex 4` Password: $1$1b5632d4$9ds0.QBvLD0U0hCfdjlQ6.
公钥加密:
(1)加密算法:算法:RSA,ELGamal,工具:openssl rsautl,gpg
(2)数字签名:算法:RSA,DSA,ELGamal,工具:openssl rsautl,gpg
(3)密钥交换:算法:DH,工具:openssl rsautl,gpg
在公钥加密时我们要使用密钥对来加密,怎样获得密钥对?
生成密钥工具:
openssl genrsa [-out filename][numbits]
[-out filename]:生成密钥存储的位置
[numbits]:生成密钥的位数
生成1024位的私钥:
[root@Tzz ~]# openssl genrsa 1024 Generating RSA private key, 1024 bit long modulus ...........................................++++++ ....................++++++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQDgpNf+Xl+Kx5eIRS99mtgpMQPsTT6d9mnMF2clPoMgcjR22jwE 9rYDKJp6xyxzyBNvNYRQvUQWwRl0rQh7n/HlcDVAcdIO880lFljUF2EJsB5M4T8U jI+4OY/jx1gEiIAL+hL63HWVrwvfT9uUe80WnhjWOUyUHklNSG70UJb0lQIDAQAB AoGAYgpPYepaFD1LeuOG+HBtynxj0+taWqJCRhoon+6KV8y/7OcNrrTldrdvxAnM 8rLtGGno1zvizXN04qDpxNpnPQN+1wolepe8x0oe+DJyYqdwiY6YpdxcTjVskVFt gdfK0ETJUuXPGnRgOKSwlmGlwi96JfbQqy9J+qyqawYObnkCQQD898XI7Bg7hM89 dHUHJptLxWntA3R2NH8RrUK94msSf4kLWgP/JJSka0D2S0vIP5h+8KVnWXuGZHrN ZFuSA9FbAkEA41Yo3Kmz8FXy3YtCEboJV+Cn0UC5FfYGUd+rNGVn3S01liccbaIO hofxKz48HW9ZYMvhi+pzMJ0KRZRmcFXEzwJARAf6iAt+hNs1xMhCBNdMIneIAjbQ pk198uoOrfRraUElQQlHU+GpnAJAKTyct9DqmRDs2ruE7eKt5/jaa41dSwJAbZSM YcETURe813lWwYCxHEDX44+VJ7bNWQ29UqZGqGAwYk4778Sbx9EjOLro8y9HH9dm wrCiEZ7A4sUjk6ZkFQJAShE2wvu8SGTkeDB6Pvxf7/ldrbwq7koaDJfCjOgc6NRC ybweV6+44HfMK3F9L0G+FoCrM9MnZKYXVkTa3TVIRg== -----END RSA PRIVATE KEY-----
为了安全起见,我们生成私钥时可以使用遮罩码创建私钥:
[root@Tzz ~]# (umask 077; openssl genrsa -out /tmp/mykey.private 1024) Generating RSA private key, 1024 bit long modulus ..........................++++++ .............++++++ e is 65537 (0x10001)
我们是用077mask码创建该密钥文件时,创建出来的文件只有属主才有读权限,在命令行中加入括号表示该命令在子shell中进行,经不会被用户看见,从而保证了私钥的安全性。
提取公钥:
openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
[root@Tzz ~]# openssl rsa -in /tmp/mykey.private -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTR5HAHJLzmsJF101boyuzGh3R M/rUxQC2MzmIKD0w+0Fk+tLJWZYs5q7vqviPREGVOstOqefWvqVM7Df8Dx75S67r MzCEI9AL3pPIhS29y2dFOA/qau+oQslR3d1z7T1Pq12w0cMTNQ9XhXJk5Dc/wWxh yqF9xf0TB63j4wEaEwIDAQAB -----END PUBLIC KEY-----
在生成私钥和提取公钥时都要依赖随机数。
Linux系统上的随机数生成器:
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞;
(注:伪随机数不安全)
熵池:内核维护的一段空间用来存放随机数。
熵池中随机数的来源:硬盘IO中断时间间隔;键盘IO中断时间间隔;
CA:公共信任的CA,私有CA;
创建私有CA工具:
openssl命令的配置文件:/etc/pki/tls/openssl.cnf,其中定义了CA的工作环境
[ ca ]:CA的子命令
dir = /etc/pki/CA :CA的工作目录
certs = $dir/certs:已经签发过的证书存放位置
crl_dir = $dir/crl:吊销列表存放位置
database = $dir/index.txt:存放了各个证书的索引数据库
certificate = $dir/cacert.pem:CA的自签证书
crlnumber = $dir/crlnumber:吊销证书编号
serial = $dir/serial:证书序列号
private_key = $dir/private/cakey.pem:CA的私钥
[ req ]:请求证书子命令
构建私有CA:
第一步:在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件。
(1)生成私钥:
[root@Tzz ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) Generating RSA private key, 4096 bit long modulus ..................................................................................................................................................................................................++ ..........................................................++ e is 65537 (0x10001) [root@Tzz ~]# ls -l /etc/pki/CA/private/cakey.pem -rw------- 1 root root 3243 Jan 7 19:41 /etc/pki/CA/private/cakey.pem
(2)生成自签证书:
[root@Tzz ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3656You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.‘, the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:mageedu Organizational Unit Name (eg, section) []:ops Common Name (eg, your name or your server‘s hostname) []:ca.mageedu.com Email Address []:caadmin@mageedu.com
-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时;
-key:生成请求时用到的私有文件路径;
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
-days:证书的有效时长,单位是day;
(注:该命令选项会根据私钥自动提取公钥)
(3)提供CA所需要的目录及文件;
[root@Tzz ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} [root@Tzz ~]# touch /etc/pki/CA/{serial,index.txt} [root@Tzz ~]# echo 01 > /etc/pki/CA/serial
第二步:要用到证书进行安全通信的服务器,需要向CA请求签署证书;
(1)用到证书的主机生成私钥(以httpd为例):
原文:http://tz666.blog.51cto.com/10990100/1732695