openssl命令的使用
OpenSSL是一个安全套接字层密码库。SSL:Secure Socket Layer。可用于建立私有CA。套接字为IP加端口。CA是为了公钥确实是发送方的公钥而不是伪造的,CA相当于第三方认证机构。公钥加密详解
对称加密:加密和解密用同一个秘钥。
公钥加密:秘钥成对出现,公钥用于公开,私钥自己留存,公钥加密的数据只能用配对的私钥解密,反之亦然。
单项加密:只能加密,用于提取特征码,定长输出。md5、sha1等。
实际通讯这三种加密算法一起使用,首先将数据用单项加密提取特征码,再用私钥加密特征码,将特征码附加在文件后面,再用对称加密将整个文件加密,再用对方的公钥加密对称秘钥,在将加密后的对称秘钥附加在加密后的文件后面。这样对方可以用私钥解密得到对称秘钥,用对称秘钥解密数据得到明文数据和加密后的数据特征码,再用发送方公钥解密特征码,接收方提取明文数据和特征码对比是否一致,如果一致即为未被篡改的数据了。
定义证书的内容:
X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者惟一标识
主体的惟一标识
扩展
发行者签名
OpenSSL是一个开源项目,有三个组件,1.openssl多用途命令行工具,2.libcrypto公共加密库,3.libssl库实现了ssl及tls。后两个是开发使用的。
PKI: Public Key Infrastructure
签证机构:CA
注册机构:RA
证书吊销列表:CRL
openssl命令:
openssl version 查看版本
openssl help 查看帮助
enc 加密工具
-e 加密
-d 解密
-a 基于文本进行编码
-salt 加入杂质
-in 指定加密的文件路径
-out 加密后文件的路径
对称加密:加密和解密使用同一秘钥
加密:openssl enc -e -des3 -a -salt -in fstab -out demo.txt
解密:openssl enc -d -des3 -a -salt -in demo.txt -out fstab
单向加密:计算文件特征码
工具:md5, sha1sum, sha224sum, sha256sum, openssl, dgst......
例:md5sum demo.txt
5b38ec7bc2d4841677b6615e421b5602 demo.sh
例:openssl dgst -md5 demo.sh
MD5(demo.sh)= 5b38ec7bc2d4841677b6615e421b5602
生成用户密码:
例:openssl passwd -1 -salt 12345678
Password:
$1$12345678$8fLAv2Wq3De5RcCyyLoze.
选项中-1表示使用md5加密,-salt指定加入杂质,这个方法可以生成用于加密的密码。
生成随机数:
rand可以生成随机数。
例:openssl rand -base64 4 -base64表示使用base64算法进行加密,后面的4指定字节数。
例:openssl rand -hex 16 -hex表示使用十六进制加密,16表示字节。
公钥加密:
加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
秘钥对生成器:
例:openssl genrsa -out secure.private 1024 -out表示输出的文件,1024表示字节数。
生成的私钥文件不可以让别人看见,所以要用:(umask 077; openssl genrsa -out key.pri 2048) 命令,加上括号可以让命令在子shell中运行,umask命令则设置的是子shell的,对当前shell没有影响。
例:cat secure.private
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCzfFR2g7VhbUwh7/Qf6DqTNBPxRzHbq3+lJy3mJBiUNt/Ja/js
......
-----END RSA PRIVATE KEY-----
提取出公钥:
从上面的输出中读取私钥
openssl rsa -in secure.private -out secure.public -in表示读取的文件,-out输出到的文件
随机数生成器:
/dev/random 仅从熵池返回随机数,随机数用尽,阻塞
/dev/urandom 从熵池返回随机数,随机数用尽,会利用软件生成伪随机数;非阻塞
查看证书信息命令:
打印出证书的内容:
openssl x509 -in cert.pem -noout -text
打印证书的过期时间
openssl x509 -in signed.crt -noout -dates
打印出证书的系列号
openssl x509 -in cert.pem -noout -serial
打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject
以RFC2253规定的格式打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
在支持UTF8的终端一行过打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
打印出证书的MD5特征参数
openssl x509 -in cert.pem -noout -fingerprint
打印出证书的SHA特征参数
openssl x509 -sha1 -in cert.pem -noout -fingerprint
把PEM格式的证书转化成DER格式
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
把一个证书转化成CSR
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
给一个CSR进行处理,颁发字签名证书,增加CA扩展项
openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
给一个CSR签名,增加用户证书扩展项
openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
查看csr文件细节:
openssl req -in my.csr -noout -text