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

Linux自学笔记——OpenSSL命令行工具

2017-10-11 14:42 141 查看
OpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能以及ssl协议,并提供程序供测或其他目的使用。 传输层协议:TCP, UDP, SCTP port:进程地址,进程向内核注册使用某端口(独占) 同一主机上的进程间通信:IPC , message queue,shm,semerphor 不同主机上的进程间通信:socket cip:port <-- --> sip:port cip:55673 <-- --> sip:80 监听模式:LISTEN(ip:port) SSL:Secure Socket Layer http --> ssl --> https 安全的目标: 保密性:confidentiality 完整性:integrity 可用性:availability 攻击类型: 威胁保密性的攻击:窃听、通信量分析; 威胁完整性的攻击:更改、伪装、重放、否认 威胁可用性的攻击:拒绝服务(DoS) 解决方案: 技术(加密和解密)、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务) 加密和解密: 传统加密方法:替代加密方法、置换加密方法 现代加密方法:现代块加密方法 服务: 认证机制 访问控制机制 密钥算法和协议 对称加密 公钥加密 单向加密 认证协议Linux系统:OpenSSL(ssl),GPG(pgp) OpenSSL由三部分组成: libencrypto库 libssl库 openssl多用途命令行工具 加密算法和协议: 对称加密:加密和解密使用同一个密钥; DES:Data EncryptionStandard; 3DES:triple DES AES:Advanced EncryptionStandard;(128bits,192bits,256bits,384bits) Blowfish Twofish IDEA RC6 CAST5 特性:1. 加密、解密使用同一个密钥2. 将原始数据分割称为固定大小的块,组个进行加密; 缺陷:1. 密钥过多;2. 密钥分发困难;公钥加密:密钥分为公钥与私钥 公钥:从私钥中提取产生;可公开给所有人;pubkey 私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key 特点:用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然; 用途: 数字签名:主要在于让接收方确认发送方的身份; 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方; 数据加密 算法:RSA,DSA,ELGamal DSS:Digital SignatureStandard DSA:Digital SignatureAlgorithm 单向加密:即提出数据指纹;只能加密不能解密; 特性:定长输出、雪崩效应; 功能:保证数据完整性; 算法: md5:message digest 5, 128bits sha1:secure hashalgorithm 1, 160bits sha224,sha256,sha384,sha512 密钥交换:IKE(InternetKey Exchange) 公钥加密 DH(deffie-Hellman) A: p,g B: p,g A:x --> p^x%g==>B A:(p^y%g)^x=p^yx%g B: y --> p^y%g ==>A B: (p^x%g)^y=p^xy%g PKI:Public Key Infrastructure 公钥基础设施: 签证机构:CA 注册机构:RA 证书吊销列表:CRL 证书存取库: x.509v3:定义了证书的结构以及认证协议标准 版本号 序列号 签名算法ID 发行者名称 有效期限 主体公钥 发行者的唯一标识 扩展 发行者的签名 SSL:Secure sockets Layer Netscape: 1994 V1.0, V2.0, V3.0 TLS:Transport Layer security IETF:1999 V1.0, V1.1, V1.2, V1.3 分层设计:1. 最底层:基础算法原语的实现,aes,rsa,md52. 向上一层:各种算法的实现;3. 再向上一层;组合算法实现的半成品;4. 用各种组件拼装而成的各种成品密码学协议软件;SSL/TLS SSL:安全套接字层(ssl 1.0,ssl2.0,ssl3.0) TLS:传输层安全(tls 1.0,tls1.1,tls 1.2,tls 1.3) SSL会话的主要三步: 客户端向服务器端索要并验证证书; 双方协商生成“会话密钥”; 双方采用“会话密钥”进行加密通信; SSL Handshake Protocol:ssl握手协议 第一阶段:ClientHello 支持协议的版本,比如tls 1.2; 客户端生成一个随机数,稍后用户生成“会话密钥” 支持的加密算法,比如AES、3DES、RSA; 支持的压缩算法; 第二阶段:serverhello 确认使用的加密通信协议版本,比如tls 1.2; 服务器端生成一个随机数,稍后用于生成“会话密钥” 确认使用的加密方法; 服务器证书; 第三阶段:验证服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)发送以下信息给服务器端: 一个随机数; 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送; 客户端握手结束通知; 第四阶段: 收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有用到的“会话密钥”; 向客户端发送如下信息; 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送; 服务端握手结束通知;Openssl(2)组件: libcrypto,libssl主要由开发者使用; openssl:多用途命令行工具;openssl: 从多子命令,分为三类: 标准命令 消息摘要命令(dgst子命令) 加密命令(enc子命令) 标准命令: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

单向加密: 工具:openssl dgst,md5sum,sha1sum,sha224sum,… dgst命令:~]#openssl dgst –md5/path/to/somefile

一般可以验证文件的完整性。 生成用户密码: 工具:passwd,openssl passwd openssl passwd -1 –salt SALT

Note:salt不同,相同的密码,输出也不同。 生成随机数: 工具:openssl rand ~]# openssl rand -hex NUM ~]# openssl rand -base NUM

公钥加密: 加密解密: 算法:RSA,ELGamal 工具:openssl rsautl,gpg 数字签名: 算法:RSA,DSA,ELGamal 密钥交换: 算法:DH 生成密钥: 生成私钥:#(umask077 ;openssl genrsa –out /path/to/private_key_fileNUM_BITS)

提出公钥:#openssl rsa –in /path/from/private_key_file -pubout

Linux系统上的随机数生成器: /dev/random:仅从熵池返回随机数;随机数用尽,阻塞; /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不安全; 熵池中随机数的来源; 磁盘IO中断时间间隔 键盘IO中断时间间隔CA: 公共信任的CA,私有CA; 建立私有CA: openssl OpenCA openssl命令: 配置文件:/etc/pki/tls/openssl.cnf

构建私有CA示例:准备两台主机,一台作CA主机192.168.19.128,一台作用户主机192.168.19.134(证书请求主机)构建私有CA:在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;步骤:1) 生成私钥:~]# (umask077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2) 生成自签证书;~]# opensslreq -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem-days 3655 -new:生成新证书签署请求; -x509:生成自签格式证书,专用于创建私有CA; -key:生成请求时用到的私钥文件路径; -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书 -days:证书的有效时长,单位为day;

3) 为CA提供所需的目录及文件;~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}~]# touch /etc/pki/CA/{serial,index.txt}~]# echo 01 > /etc/pki/CA/serial

要用到证书进行安全通信的服务器,需要向CA请求签署证书; 步骤:(以httpd为例)1) 用到证书的主机生成私钥:~]# mkdir /etc/httpd/ssl ~]# cd /etc/httpd/ssl~]#(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

2) 生成证书签署请求

3) 将请求通过可靠方式发给CA主机;~]#scp /etc/httpd/ssl/httpd.csr root@192.168.19.128:/tmp/

可在CA主机上查看请求主机发送的证书请求;

4) 在CA主机上签署证书;~]# opensslca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

查看 证书信息: ~]# openssl x509 -in/etc/pki/CA/certs/httpd.crt -noout -serial -subject

5) CA所在的主机将签署完的证书,发送回请求主机;~]#scp /etc/pki/CA/certs/httpd.crt root@192.168.19.134:/etc/httpd/ssl/

吊销证书: 步骤: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/SERIAL.PEM

其中的 SERIAL要换成证书真正的序列号;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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openssl