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
解密:~]# 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
本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/1971422,如需转载请自行联系原作者
Linux自学笔记——OpenSSL命令行工具相关推荐
- Linux命令行如何编辑word文档,在Linux平台下用命令行工具显示Word文档
在Linux平台下用命令行工具显示Word文档 ·Antiword ·Catdoc ·wvWare[@more@] Viewing Word files at the command line Wed ...
- 拿走不谢!创客学院教你64个Linux运维必备命令行工具
系统管理员(sysadmins)负责日常维护生产系统和服务.其中一个关键任务就是保证功能性服务能24小时工作.为了这个,他们得很小心地计划备份方式,灾难管理策略,定时维护,安全审查,等等.和任意其他管 ...
- linux运行16668端口,Linux 性能监控之命令行工具
引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...
- 显示器 Linux 性能 18 (一个命令行工具传递)
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...
- linux终端字体放大_微软Build:Windows 将附完整Linux内核,新命令行工具,开源六小时冲上GitHub第二...
21CTO导读:微软于2016年成为Linux基金会的成员,同时宣布加入OSI,以增加其在宣传开源软件的使用.贡献和发布方面的作用,包括其客户和整个生态系统. 微软还是Linux基金会的"高 ...
- linux下的安装命令行工具下载,本地安装DEB包的3种命令行工具(适合Debian体系)
1. 前言 在本教程中,我们将学习如何使用三种不同的命令行工具(dpkg.apt和gdebi)在Debian及其衍生产品(如Ubuntu和Linux Mint)中安装本地软件包(. deb). 这对那 ...
- linux开源炫酷命令行工具,Linux上超酷的命令行扩展工具Oh My Zsh
Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式.它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作.给我们一种全新的方式使用命 ...
- jq linux下载文件,linux下的json命令行工具–jq
jq是一个很轻量却很强大的命令行下的json解析器.jq是json中的"sed"命令,它可以用来slice.filter.map.transform json数据.jq是用C编写的 ...
- linux端口映射_Linux命令行工具
/* ----------- wpa_supplicant的使用方法 ------------*/ 介绍: 对无线网络的配置是全局性的?而非针对具体接口.wpa_supplicant是一个 独立运行的 ...
最新文章
- 协方差及PCA降维计算
- 「尖峰对话」问题征集:向张宏江和John Hopcroft 近距离提问
- LaTeX如何让两张图并排显示
- 计算机二级学号填错了,计算机二级错题(58页)-原创力文档
- [开源]KJFramework.Message 智能二进制消息框架 -- 性能提升
- 十四、堆(Heap)
- 【Java】eclipse如何设置成保护眼的背景色
- JavaScript每日学习日记(0)
- ZZULIOJ ASCII码排序(多实例测试)
- XSS、CSRF与验证码等等
- IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞
- 简书的假想用户场景以及不同用户各自需要解决的烦恼
- python是什么类型的编程语言-python是什么编程语言
- 【教程搬运】廖雪峰Git的使用教程(二)
- 【工具分享】分享一个移动端网络诊断工具(适用于安卓平台)
- 遥控三通直升机飞行原理简介
- 如何做客户分析?客户分析的内容有哪些?
- 沙扬娜拉一首——赠日本女郎(徐志摩)
- 一本通 3.1 例 1」黑暗城堡
- UOS系统(ubuntu)安装开发环境