加密解密基础、OpenSSL通信 及 搭建私有CA (Blog 11)

加密解密技术基础、PKI及创建私有CA

 

常见的算法是ssl/tls协议得以实现的基础保证;
ssl: secure socket layer,安全的套接字层 网景公司维护,1994年发布 3.0出现漏洞但仍在使用
tls: transport layer secure,传输层安全 IETF: 国际电子工程师协会,1999年发布 兼容ssl,tls v1.2是通用标准

ssl和tls协议的实现:OpenSSL,用户空间的软件程序;其组件提供了”加解密”算法库;
OpenSSL组成:
libcrypto: 加密和解密算法库
libssl: 通信安全实现
openssl:用户空间命令行程序

程序员仅需要调用libcrypto, libssl就能实现常见的加密解密算法实现;
而作为 一个资深的运维工程师,哦不,一个资深的运维工程师至少也能通过工具实现各种加密解密算法;

早期能使用互联网通信就已经很了不起了,并没有考虑加密;所以流行的服务程序不会自带加解密功能;
如何实现通信:
局域网:MAC
互联网:IP
如何实现主机上进程间通信?
同主机:share memory, semphor, signal, message queue, unix sock
跨主机:socket, rpc

使用的网络通信模型:ISO/OSI,四层
应用层:编码数据为特定可传输在网络上的格式;数据流式化的过程
传输层:封装传输层首部;协议:tcp, udp
互联网层:封装网络层首部:协议:ip, ipv6
数据链路层:封装帧首部及尾部;

在此模型中并没有对数据进行加密,如果修改会“牵一发而动全身”构建在其上的所有应用都必需修改;
网景公司为http提供一个模块ssl;在 应用层和传输层之间添加半层;遵循此协议(ssl,tls),通信过程中即可完成对数据加密;

SSL如何通信:

SSL HandShark
SSL Handshark
1、客户端生成随机数,发送自己支持的对称加密、单向加密算法、随机数及OpenSSL version;
2、服务端生成随机数,发送自己确认的对称加密、单向加密算法;并发送自己的证书;有必要时,需要索要客户端的证书;
3、客户端生成随机数,验证证书;发送编码变更通知(确认此次通信使用协商的算法)、随机数;客户端握手结束;
4、服务端接收客户端发来的第二个随机数,生成临时密钥;发送编码变更通知;服务端握手结束;
5、建立SSL连接

SSL通信
6、服务端对明文数据提取指纹,用自己的私钥加密指纹:签名;
7、服务端用生成的临时会话密钥加密整个数据;用对方的公钥加密会话密钥;
8、客户端用自己的私钥解密出会话密钥;用会话密钥解密出数据和加密后的特征码
9、客户端用对方的公钥解密出指纹;用协商的签名算法加密数据与解密的比较;

数字签名

密钥交换

证书格式:
version
serail
发行者名
发行者唯一 标识
主体名
主体公钥
主体唯一 标识
签名算法ID
证书有效期
扩展
发行者签名:对以上数据的数字签名,发行者用自己的私钥加密数据指纹;

证书验证:
1、用发行者公钥解密数字签名;来源合法
2、用相同签名算法ID 加密数据与解密出的特征码比较;相同则,完整性;
3、有效期
4、主体名与被访问主机名或人名相同;
5、证书没有在吊销列表中;

 

公钥基础设施:PKI(Public Key Infrastructure)
CA: 发行者
RA:注册机构
CRL:证书吊销列表 /etc/pki/CA/crl
CB:证书存取库:/etc/pki/certs

公钥作用:
KE: Key Exchange
encrypto
Signature Algorithm

如果要基于SSL通信就必须在可信的CA那里去获取一个证书,是不理想的;在私有网络中可以使用SSL协议实现工具openssl,完成创建私有CA

私有CA创建步骤:

CA搭建

协议最基础依赖是基本算法,所以对基本算法应该有基本的了解

对称加密
加密解密使用同一密钥
加密算法:
des: Data Encryption Standard,IBM公司安全实验室研发,成为事实上的标准;在2003年被美国100万的服务破解;
des3:3轮des加密,3个数量级(10^3倍)的des
aes:NIST,密钥长度(128bits, 192bits, 256bits),对于临时密钥没有必要使用
blowfish,twofish,idea,rc6,cast5

加密:openssl enc -e 加密算法 -a -salt -in fstab -out fstab.ciphertext [-k PASS]
解密:openssl enc -d 加密算法 -a -salt -in fstab -out fstab.ciphertext [-k PASS]
加密算法列表获取:openssl ? –> Cipher commands 下的所有;引用时需要在其前加 –
例如:
使用123加密,复制至/tmp目录下的fstab文件:
[root@localhost tmp]# openssl enc -e -aes-256-ecb -a -salt -in fstab -out fstab.ciphertext -k 123
[root@localhost tmp]# ll
总用量 8
-rw-r–r– 1 root root 541 11月 27 17:37 fstab
-rw-r–r– 1 root root 760 11月 27 17:37 fstab.ciphertext
[root@localhost tmp]# cat fstab.ciphertext
U2FsdGVkX18zBoh2yF5IVlECM/u/GQlp8Rm4VD4QBx4mYaudtyTBfQn2Q/PUkzB4
Ny5M5deeTfMwLJX6WVIsoIST/sGZVoshdXPQ9Q9RYjaOKsZBZVAI6IWnH7mEXpCP
/7zN1p4bFYR/35V+aveFTY7UjC6qvjkSp7+hZnQvu9/jfYDp0HXhEdfPLBOOzWwL
5k6THnutYO1ZWTYYopoF838XVl0y954HobjfBjvswqC1vJN+ASCddioOCdMPq1OI
M5T5CSW98ii1cuosHbVsQiUKFef5BcGuN49cig+ZWzsyIkW8VN9lZy0WZfDP5Lm2
71LzHSqtYJOApi+nbPC0PSVs60o+0df+HsEI4xfOpGTAsRO0rntZOSqasdqhle1m
vAv34Byu7BN/9mCmqH6pd4CUZz4NFHp04pcwFJykjeTCcU9dvzyF40TgJk6UEYA1
jijVy9bRMyiiHWUqkT7rArBmPKL8zV2x30BTC5tHJZmPoV8uhhUV9X/wct4x4Dv1
btv/f83WRkp2T2MHa0Nv8R6hwu5DyCjtrLJrjThsE8k5GoFOjoZz19tCwPC6ptt/
obn6JLlaAEhV/9UXIbvwwx+1+ZLot0WXEqTbCNQVLl1AwtB8MZnSH2kCuFupwF7H
uFTJ4A7DfN7POLejb+KnBNCH/HEa4RpubOn3/jucOWne4tr3G3QKwy2kazAxdwQB
yZUR0We/PupF61uGW1CgtXrjXGHM7sX/m8UwODDObm8=

使用123解密:
[root@localhost tmp]# openssl enc -d -aes-256-ecb -a -salt -in fstab.ciphertext -out fstab.plaintext -k 1234 <—注意密码不是同一密码
bad decrypt
140461914601376:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:604:
[root@localhost tmp]# openssl enc -d -aes-256-ecb -a -salt -in fstab.ciphertext -out fstab.plaintext -k 123 <–使用同一密码时
[root@localhost tmp]# ll
总用量 12
-rw-r–r– 1 root root 541 11月 27 17:37 fstab
-rw-r–r– 1 root root 760 11月 27 17:37 fstab.ciphertext
-rw-r–r– 1 root root 541 11月 27 17:38 fstab.plaintext
[root@localhost tmp]# cat fstab.plaintext

#
# /etc/fstab
# Created by anaconda on Fri Nov 10 05:24:27 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=5b4e0db2-8c87-4422-9ac5-37142e5cc600 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0

非对称加密:
加密解密使用一对儿密钥
私钥:private key,自己留存;
公钥:public key,公开;
算法:
DSA(Algorithm): 也被称为DSS(Digital Signature Standard):只能签名
RSA: 既能签名,又能加解密;

功能:
数字签名:用私钥加密数据的指纹;
密钥交换:用对方的公钥加密对称密码;
数据加密:效率不高;

生成私钥:(umask 077; openssl genrsa -out private.key NUM_BITS)
从私钥中提取公钥:openssl rsa -in private.key -pubout
(): bash中特殊含义:在括号中运行的命令在当前shell的子shell进程中运行。若在子shell中定义的特性仅在子shell的生命周期中有效;
NUM_BITS:密钥长度:2^n;

例如:
[root@localhost tmp]# openssl genrsa 768
Generating RSA private key, 768 bit long modulus
…………..++++++++
…..++++++++
e is 65537 (0x10001)
—–BEGIN RSA PRIVATE KEY—–
MIIBzAIBAAJhANVO6rKDNk5B7l7G7/sNN3ODJsYQoOF4T3g+CNtRsxaEWfiZCR7z
W4Q9MYOTMtNmOvZCcA2INLDrBPpXiREpTRaZ0P7gIgGcJ0xkYqvaBkhRZE3JQWSN
ogZQZszRZ+uvdQIDAQABAmBVyGryZ3pLdpBaZT7Vg7ctKS1Ksh1BD5VGEgyVxwFy
qL9WDpVwcQX45HMpKuVhxtZrIN6QkpGgKPsu8UOFmFqraugM3d27yB+tngoE4fNl
lrxKZMVeH246CWCKzdPozXECMQD5W8SY9gVoUGA0JgX1fBSkyI3JncLlV360ME5B
dVHzoy91XNcAaw/5S8YbMnjxfHMCMQDa/VfejM07Xm2ukRDQk2GDmLyz0pE23Tz0
seNa7imNu/sZc9a5GRZKfJ5Scp16UncCMQDiAhMGsLXl/jO0EGKGRZhQYpZgjuT/
CXaFyuKi4bsNoHJ7ZVJZxrALvGoqbGzCM5ECMQDXQdgxpm3GQdfGlEnW/EgKNwSm
LgEX0Pit/n3hT+IAtBrqtfcHEyXaKgzmNkudhZkCMQCcc8jX9pY0cIfkzyW38RSz
ScDW5rBUoDG8xW4ajG+5+ayk7iGcJQnYw5kjeTvTsMs=
—–END RSA PRIVATE KEY—–
[root@localhost tmp]# openssl genrsa 768 > private_key_file <– 重定向保存密钥
Generating RSA private key, 768 bit long modulus
…………………..++++++++
…………………………………………………………..++++++++
e is 65537 (0x10001)
[root@localhost tmp]# openssl genrsa -out private_key2_file 768 <–指定输出路径保存密钥
Generating RSA private key, 768 bit long modulus
…++++++++
…..++++++++
e is 65537 (0x10001)
[root@localhost tmp]# ll private_key*
-rw-r–r– 1 root root 688 11月 27 17:56 private_key2_file
-rw-r–r– 1 root root 692 11月 27 17:56 private_key_file

注意:其权限是其它用户可读,而private key是不公开的。所以因该将其权限修改为其它用户不可读;当然有一种更为简便的方法,如下:
[root@localhost tmp]# (umask 077; openssl genrsa -out private_key3_file 768)
Generating RSA private key, 768 bit long modulus
……..++++++++
………………….++++++++
e is 65537 (0x10001)
[root@localhost tmp]# ll private_key3_file
-rw——- 1 root root 692 11月 27 17:59 private_key3_file
[root@localhost tmp]# cat !$
cat private_key3_file
—–BEGIN RSA PRIVATE KEY—–
MIIBywIBAAJhALDOWj5q2VuqlNyfOadojFHtAnVUR/iE5En89zzi/fL91ey52IAe
ukGxwYWjb6rob+rJLvxO6xWdJEs2OpPKjgvlBCNPg4lR3BQ4ze47GdnUsyDuIfls
Q1y3bLk6hPg8awIDAQABAmEAjos/fJUeemXzsE965vpGLwLbeYaio71YZEJbfi4v
uYlmwH0xDFI5rh9Gu5yBuhO8Vxgm6ZpFUT11x3mPDCkV7I4iaEoBsVKQMlFT350q
EUirIKbU9SXCDHSDc1D2DkHJAjEA51cxjv/Nl9MBYvvB8S8bgou2g2qGSNIg1yc5
rpscAsgoFicLm+TbdNMw6LhnTQMdAjEAw6cGNlrrEOgvfXrQ+15dbZ6/gaFLM/fj
GYSIY1aDMbE007fhadi124E4SIJrWV8nAjBni/mcvhax/DpEqdc3MxSnLA33aHjO
o28bnm0NIFQ7UofO0o85qggolFbx84gZSmkCMFVEq65wvVWm+1uCdSW4IJuvveKu
+ulxNWZfnlk80PyNMGq9Dt5kdg1uKatgO4y9rQIxAKX0Iy2CEXWKaR63oK6Pq2h7
ztssk4Co5cCW8Nhq5OABxErqGLsDmdJVLF8HxpYKAA==
—–END RSA PRIVATE KEY—–

对私钥提取公钥:
[root@localhost tmp]# openssl rsa -in private_key3_file -pubout
writing RSA key
—–BEGIN PUBLIC KEY—–
MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhALDOWj5q2VuqlNyfOadojFHtAnVUR/iE
5En89zzi/fL91ey52IAeukGxwYWjb6rob+rJLvxO6xWdJEs2OpPKjgvlBCNPg4lR
3BQ4ze47GdnUsyDuIflsQ1y3bLk6hPg8awIDAQAB
—–END PUBLIC KEY—–

单向加密
提取数据的特征码;类似于指纹;能把人的指纹提取出来,可以把指纹还原成人吗?不行!
工具:openssl dgst, md5sum, sha#sum #=(1:160 224bits 384bits 512bits)
特性:
定长输出:输出长度相同,与数据大小无关;
雪崩效应:初始条件的微小改变,引起结果巨大变化;
功能:
完整性验证:因为这个世界上没有两片相同的树叶;

加密格式:工具 文件
openssl dgst -md5 file
md5sum file
sha1sum file

例如:
[root@localhost tmp]# openssl dgst -md5 fstab
MD5(fstab)= 9d99b0444a3e8c6236b5660b598a67a9
[root@localhost tmp]# md5sum fstab
9d99b0444a3e8c6236b5660b598a67a9 fstab
[root@localhost tmp]# sha1sum fstab
4b96a9f1b0431d93dab3a9d8e57e58153f1424d8 fstab
[root@localhost tmp]# openssl dgst -sha1 fstab
SHA1(fstab)= 4b96a9f1b0431d93dab3a9d8e57e58153f1424d8

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89080

(1)
逆神阳逆神阳
上一篇 2017-11-29 12:52
下一篇 2017-11-29 14:25

相关推荐

  • 游戏运维工程师

    爱乐盟互动为深圳市政府评定的深圳市重点文化企业,同时为广东省高科技产业商会常务理事单位,注册资金人民币1000万元。公司的原创大型MMORPG网游《王者传说2》为深圳市政府重点支持的网游项目,《王者传说2》将全面领先于国内的同类产品,成为业界新标准的重要网游产品!! 《王者传说2》已进入产品研发的重要阶段。除《王者传说2》,爱乐盟也已经启动了数款全新大型网游…

    Linux干货 2016-10-19
  • 实现真实的机柜模拟图[原创]

    一般能反映机房设备位置、结构我们都喜欢通过网络拓扑图来展现,但个人感觉还不够直观、明了的表现出自己想要的结果(自己太挑剔了,呵呵)。因此写一个生成真实机柜模拟图平台,实现与真实服务器外观、服务状态、空闲位置等信息。在线效果图http://blog.liuts.com/idc/系统截图1、平台显示某一排截图2、平台显示某台服务器详细信息截图3、状态说明2U服务…

    Linux干货 2015-03-27
  • 浅谈用户和组相关配置文件

    用户、组和权限的管理 Linux如何像Windows系统那样,可以不输入密码直接进入图形界面?那么如何如何自动登录图形界面呢?这就要用到编辑配置文件: nano  /etc/gdm/custom.cof  ,在里面加上   automaticLoginEnable=true automaticLogin=root 退出…

    Linux干货 2016-10-23
  • N25第四周总结(raid)

    raid详解 大纲:    1、什么是raid      2、如何实现raid      3、为什么要使用raid      4、raid使用方法详解      5、mdadm(软raid)使用   …

    Linux干货 2016-12-22
  • Jerry首作_linux基础

    一、计算机的组成及其功能 硬件 冯·洛伊曼体系 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 存储器(Memory):存储器的功能是…

    Linux干货 2016-10-25
  • 第八周 服务管理与文本处理

    1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理 2、描述awk命令用法及示例(至少3例) 3、描述awk函数示例(至少3例)    

    2018-01-21