Linux自学笔记——OpenSSL命令行工具-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

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

简介:
+关注继续查看

      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,md5

2.     向上一层:各种算法的实现;

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

                 wKiom1neKHaiQ-t_AAFEazqshRY458.png-wh_50

                 解密:~]# openssl  enc -d  -des3  -a -salt  -out fstab   -in fstab.ciphertext

                 wKiom1neKH-DWkX0AACOom0HyY4151.png-wh_50

      单向加密:

           工具:openssl dgst,md5sum,sha1sum,sha224sum,…

           dgst命令:~]#openssl dgst –md5/path/to/somefile

           wKioL1nduXnD2E8zAAA9glhb_v4869.png-wh_50

           一般可以验证文件的完整性。

      生成用户密码:

           工具:passwd,openssl  passwd

                 openssl passwd -1 –salt  SALT

                 wKioL1nduYDCwP8pAAAhV_m4kNU748.png-wh_50

           Note:salt不同,相同的密码,输出也不同。

      生成随机数:

           工具:openssl rand

           ~]# openssl  rand -hex  NUM

           ~]# openssl  rand -base  NUM

           wKiom1neKJaxEL91AABwliPdT9A331.png-wh_50

      公钥加密:

           加密解密:

                 算法:RSA,ELGamal

                 工具:openssl rsautl,gpg

           数字签名:

                 算法:RSA,DSA,ELGamal

           密钥交换:

                 算法:DH

           生成密钥:

                 生成私钥:#(umask077 ;openssl genrsa –out /path/to/private_key_fileNUM_BITS)

                 wKiom1neKKCg4jypAACu4OOVs00559.png-wh_50

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

                 wKioL1nduZqCaoTVAAA5vnfUWYE498.png-wh_50

Linux系统上的随机数生成器:

      /dev/random:仅从熵池返回随机数;随机数用尽,阻塞;

      /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不安全;

           熵池中随机数的来源;

                 磁盘IO中断时间间隔

                 键盘IO中断时间间隔

CA

      公共信任的CA,私有CA;

      建立私有CA:

           openssl

           OpenCA

      openssl命令:

           配置文件:/etc/pki/tls/openssl.cnf

           wKiom1neKLXTp-mtAAB58EC49bU077.png-wh_50

构建私有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)

wKioL1ndubOiOZU4AACrEAT01YY890.png-wh_50

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;

wKiom1neKM_R4sxrAAHPJSwhJY0215.png-wh_50

3)    为CA提供所需的目录及文件;

~]# mkdir  -pv /etc/pki/CA/{certs,crl,newcerts}

~]# touch  /etc/pki/CA/{serial,index.txt}

~]# echo  01 > /etc/pki/CA/serial

wKioL1nduc6Q28Q9AAAhE2Qs3kA768.png-wh_50

      要用到证书进行安全通信的服务器,需要向CA请求签署证书;

      步骤:(以httpd为例)

1)    用到证书的主机生成私钥:

~]# mkdir  /etc/httpd/ssl

~]# cd  /etc/httpd/ssl

~]#(umask  077; openssl  genrsa -out /etc/httpd/ssl/httpd.key  2048)

wKioL1ndudjytRR6AAE0ZlrWCfw993.png-wh_50

2)    生成证书签署请求

wKiom1neKPCD7AMdAACD1smZHgA458.png-wh_50

3)    将请求通过可靠方式发给CA主机;

~]#scp /etc/httpd/ssl/httpd.csr  root@192.168.19.128:/tmp/

wKiom1neKPii-VhDAAAk5t7Q4dc737.png-wh_50

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

wKioL1ndufTBnZmkAADlzA1NWrY877.png-wh_50

4)    在CA主机上签署证书;

~]# opensslca  -in /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days 365

wKioL1nduf3AyNh6AACBiPHTaOw223.png-wh_50

查看 证书信息:

    ~]# openssl x509  -in/etc/pki/CA/certs/httpd.crt  -noout  -serial -subject

    wKiom1neKRaShbBOAAAeZHqiPGY085.png-wh_50

5)    CA所在的主机将签署完的证书,发送回请求主机;

~]#scp  /etc/pki/CA/certs/httpd.crt  root@192.168.19.134:/etc/httpd/ssl/

wKioL1nduhPx6mxAAAAgzAG2VWI980.png-wh_50

      吊销证书:

      步骤:

1)    客户端获取要吊销证书的serial(在使用证书的主机执行):

~]#openssl  x509 –in /etc/pki/CA/certs/httpd.crt  -noout -serial  -subject

wKioL1nduhuif-McAAAgFZTFZZQ477.png-wh_50

2)    CA主机吊销证书

先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;

吊销:

    wKiom1neKTXSljPeAAAa6Sjncv0185.png-wh_50

    #openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.PEM

    wKiom1neKUDCVeDLAAAaLiAHN0E824.png-wh_50

          其中的 SERIAL要换成证书真正的序列号;

3)    生成吊销证书的吊销编号(第一次吊销证书时执行)

echo 01 >/etc/pki/CA/crlnumber

wKioL1ndujuQKtvmAAATOwBIFak440.png-wh_50

4)    更新吊销证书列表

#openssl ca–gencrl  -out  thisca.crl

wKioL1ndukWQA_PfAAAWzkcluCM673.png-wh_50

查看crl文件:

    #openssl crl –in  /path/from/crl_file.crl  -noout –text

    wKiom1neKV3DsK1hAAEPxkgkUaE660.png-wh_50




本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/1971422,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11888 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7361 0
监控 Linux 性能的 18 个命令行工具
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作。在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易。基于此原因,我们已编写了最常使用的18个命令行工具列表,这些工具将有助于每个Linux/Unix 系统管理员的工作。
1417 0
13694
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载