您的位置:首页 > 运维架构

OpenSSL

2016-01-18 21:11 363 查看
OpenSSL openssl命令: 查看帮助:给一个错误的命令就可以查看所有命令帮助。查看软件版本:openssl version 标准命令: enc, ca, req, genrsa, ... 对称加密:工具:openssl enc, gpg支持的算法:3des, aes, blowfish, towfish enc对称加密命令:加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext-a表示64位文本文件,默认二进制文件, 单向加密:工具:openssl dgst, md5sum, sha1sum, sha224sum, ... dgst命令:~]# openssl dgst -md5 /PATH/TO/SOMEFILE[root@yph7s ~]# md5sum fstab12f17f09df2c25649fd28a59e49955da fstab 生成用户密码:工具:passwd, openssl passwd [root@yph7s ~]# whatis passwdsslpasswd (1ssl) - compute password hashes[root@yph7s ~]# man sslpasswd openssl passwd -1 -salt SALT ---“-1”指md5[root@yph7s ~]# openssl passwd -1 -salt 123456Password: $1$123456$QMBx42LRqK1ZWPfItmpYG0 生成随机数:工具:openssl rand[root@yph7s ~]# whatis rand[root@yph7s ~]# man sslrand ~]# openssl rand -hex NUM ---16进制数字[root@yph7s ~]# openssl rand -hex 10 -----10表示生出10位,7347b0074352d7643192 ~]# openssl rand -base64 NUM ---64为文本格式[root@yph7s ~]# openssl rand -base64 10xSIyOAD+K84dvQ== 最后的==属于标准输出,使用随机数时要去掉 公钥加密: 生成私钥:[root@yph7s ~]# openssl genrsa 1024 >> private 1024位长度,必须是2^n位数 生成私钥: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)使用括号括起来的命令表示在子shell中执行,先设置umask,然后执行,完后退出子shell,对当前shell无影响[root@yph7s ~]# (umask 077; openssl genrsa -out private2 2048)umask 077是为了给私钥文件设置权限 提取公钥: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout[root@yph7s ~]# openssl rsa -in ./private -pubout -out ./public.key Linux系统上的随机数生成器:/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不安全; 熵池中随机数的来源:硬盘IO中断时间间隔;键盘IO中断时间间隔;敲键盘,复制数据 CA: openssl配置文件:/etc/pki/tls/openssl.cnf 构建私有CA---以httpd为例:CA服务机:cakey.pem私钥、cacert.pem自签证书、httpd.crt最终证书客户机:httpd.key 客户机私钥、httpd.csr签署请求、httpd.crt最终证书 在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;CA主机:(1) 生成私钥;[root@yph7s ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)名字必须为cakey.pem (2) 生成自签证书;[root@yph7s ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 ---只有作为CA主机时才会在此目录下创建 -new:生成新证书签署请求;-x509:专用于创建私有CA时,生成自签格式证书;-key:生成请求时用到的私有文件路径;-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;-days:证书的有效时长,单位是day; 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]:Alibaba ----公司名字Organizational Unit Name (eg, section) []:ops --------部门名字Common Name (eg, your name or your server's hostname) []:a.com ----主机名Email Address []:ali@alibaba.com -----管理员邮件地址 (3) 为CA提供所需的目录及文件;CA服务器[root@yph7s ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}[root@yph7s ~]# touch /etc/pki/CA/{serial,index.txt}[root@yph7s ~]# echo 01 > /etc/pki/CA/serial -----序列号 等把CA客户的请求拷过来后[root@yph7s ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365--为申请授权签证[root@yph7s ~]# cat /etc/pki/CA/index.txtV170116191737Z01unknown/C=CN/ST=BeiJing/O=Alibaba/OU=p\x08ops/CN=www.magedu.com/emailAddress=webadmin @magedu.com [root@yph7s ~]# scp /etc/pki/CA/certs/httpd.crt root@172.16.59.1:/etc/httpd/ssl/ ---将证书发给请求者然后把httpd.csr删掉,避免泄露 服务机都可以看证书信息[root@yph7s ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subjectserial=01subject= /C=cn/ST=beijing/O=alibaba/OU=sho/CN=www.magedu.com/emailAddress=tooy@magedu.com CA客户机:(1) 用到证书的主机生成私钥;[root@localhost ~]# mkdir /etc/httpd/ssl[root@localhost ~]# cd /etc/httpd/ssl 生成私钥:[root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) (2) 生成证书签署请求[root@localhost ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365Locality Name (eg, city) [Default City]:BeiJing -----一定要与主机CA在同一域,同一单位,应该是公司保持一致Organization Name (eg, company) [Default Company Ltd]:Alibaba ----公司名字,Common Name (eg, your name or your server's hostname) []:www.magedu.com ----一定与客户端访问的名字一致 (3) 将请求通过可靠方式发送给CA主机;[root@localhost ssl]# scp /etc/httpd/ssl/httpd.csr root@172.16.59.3:/tmp/一般是不能通过网络发送的,应该是CA派人拷贝走 客户机查看证书中的信息:[root@localhost ssl]# openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subjectserial=01subject= /C=cn/ST=beijing/O=alibaba/OU=sho/CN=www.magedu.com/emailAddress=tooy@magedu.com CA吊销证书:一般会自动吊销,不用我们手动吊销,只需了解就行。openca是常用吊销命令,不是这个,步骤:(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject (2) CA主机吊销证书先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致; 吊销:# openssl ca -revoke /etc/pki/CA/newcerts/##.pem ---证书序列号 (3) 生成吊销证书的吊销编号(第一次吊销证书时执行) ---服务器第一次吊销时,再吊销第二个人就不了# echo 01 > /etc/pki/CA/crlnumber (4) 更新证书吊销列表# openssl ca -gencrl -out thisca.crl 查看crl文件:# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text 加密类型: 对称加密:加密和解密使用同一个密钥; 公钥加密:密钥分为公钥与私钥公钥:从私钥中提取产生;可公开给所有人;pubkey私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然; 用途:数字签名:发送方用私钥加密数据数据特征码的结果。主要在于让接收方确认发送方的身份;确认来源合法性密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;数据加密:安全性很低,一般不用 单向加密:即提出数据指纹;只能加密,不能解密;特性:定长输出、雪崩效应;功能:完整性验证;算法:md5:Message Digest 5, 128bitssha1:Secure Hash Algorithm 1, 160bits 安全的哈希算法sha224, sha256, sha384, sha512 密钥交换: IKE(Internet Key Exchange)互联网秘钥交换公钥加密密码本身不用在互联网传输,所有比较安全DH(Deffie-Hellman)地狱男爵A:p, g --用生成器生成非常大的质数,这两个是公开的B:p, g A:生成 x ---只有自己知道然后计算S1= p^x%g把S1给B B:生成 y----y只有B知道计算-S2=p^y%g把S2给A A再计算:S3 =S2^xB再计算: S4=S1^y (p^y%g)^x=(p^x%g)^y 即S3=S4,S3和S4就是二人的秘钥 外人只最多窃取p,g,S1和S2,但计算不出x和y,因为数太大非常困难,在数学界都是难题 加密具体流程:Alice:(1)Alice用单向加密MD5等计算出数据特征码(2)然后用自己的秘钥加密特征码,生成数字签名(3)把数字签名附加到数据后面----------确保完整性和来源合法性。(4)Alice用一次性秘钥结合对称加密算法加密数据和数字签名,生成一个对称加密的解密密钥(5)再拿jack的的公钥加密这个对称加密的解密密钥 jack:(6)jack拿自己的私钥解密,从而拿到对称加密的解密密钥(7)jack拿对称加密的解密密钥,进行解密操作后,就得到了数据和数字签名(8)拿Alice公钥配对,验证来源合法性(9)用相同的单向加密计算数据的特征码,与配对数字签名后得到的特征码是否一致,从而验证数据完整性。 但是Alice和jack如何拿到对方的公钥,网上直接传输很危险,如果公钥被劫持,悄悄替换成间谍的公钥了呢CA是个大家都认可的平台,大家都信任CA,通过CA传输公钥 如何知道你拿到的CA证书不是假的呢,CA一般都是当面交易的,不会被劫持。正版windows系统内置的有CA证书,盗版就不一定了。用CA的公钥解密CA证书,再用定向加密计算并比较证书特征码。看证书的有限期,看主题名称是否一致,看证书是否被吊销CA证书是自己给自己发的, PKI:Public Key Infrastructure公钥基础设施: 签证机构:CA ---商水县公安局,但使用范围是全国注册机构:RA ---袁老乡派出所证书吊销列表:CRL ----公钥丢失,申请吊销证书存取库: X.509v3:定义了证书的结构以及认证协议标准版本号 -----身份证二代序列号 ----隐藏签名算法ID发行者名称有效期限主体名称 --姓名主体公钥发行者的惟一标识 ----商水县公安局的id主体的惟一标识 ----身份证号扩展发行者的签名 SSL会话主要三步:1、客户端向服务器端索要并验正证书(公钥);(支付宝,网银等服务器也会向客户端索要证书)2、双方协商生成“会话密钥”;---对称加密和解密用同一个秘钥3、双方采用“会话密钥”进行加密通信; SSL 握手四步走第一阶段:客户端ClientHello:发出加密通信请求客户端发送自己支持的协议版本,比如tls 1.2;客户端生成一个随机数,稍后用户生成“一次性会话密钥”客户端发送自己支持的加密算法,比如AES、3DES、RSA;客户端发送自己支持的压缩算法; 第二阶段:服务器端ServerHello,服务器的回应服务器确认双方都支持的加密通信协议版本,比如tls 1.2;如果协议版本不同就拒接服务服务器端生成一个随机数,稍后用于生成“一次性会话密钥”服务器确认双方都支持的加密方法;服务器发送自己的证书;(服务器所有客户端证书,一般网站不会验证) 第三阶段:客户端验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者(必须与域名一致)、证书有效期、吊销列表)发送以下信息给服务器端:一个随机数(第二个);用于服务器公钥解密编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;客户端握手结束通知; 第四阶段:服务器端收到客户端第二次发来的随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;向客户端发送如下信息:编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;服务端握手结束通知;

本文出自 “风吹草低见牛羊” 博客,请务必保留此出处http://flivfox.blog.51cto.com/10720563/1736318
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: