加密解密基礎、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]
加密算法列表獲?。簅penssl ? –> 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.www58058.com/89080

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

相關推薦

  • LVM邏輯卷管理

    LVM邏輯卷管理 LVM全稱為Logical VolumeManager邏輯卷管理器,LVM是Linux環境中對磁盤分區進行管理的一種機制,是建立在硬盤和分區之上、文件系統之下的一個邏輯層,可提高磁盤分區管理的靈活性。 其中 PV:Physical Volume 物理卷 VG:volume Group 卷組 LV:Logincal Volume 邏輯卷 實驗…

    2017-08-14
  • 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@wlm ~]# useradd tuser1 [root@wlm ~]# cp -r etc/skel/ /home/tuser1/…

    Linux干貨 2016-11-21
  • 磁盤分區及初步文件系統

    磁盤分區 磁盤分區有兩種方式:     MBR, GPT      MBR: Master Boot Record,1982年,使用32位表示扇區數 ,分區不超過2T      分區時按柱面…

    Linux干貨 2016-08-30
  • 馬哥教育網絡班21期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 #思路:使用who命令列出列出當明顯登錄的所有用戶,使用cut命令取出用戶名,使用uniq命令去重 [root@Centos6 ~]# who | cut -d" " -f1&n…

    Linux干貨 2016-07-07
  • N-22-南京-修 第三周博客作業

    #1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [xujie@localhost ~]$ who | cut -d " " -f1 | sort -u #2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost xujie]# last -x | head -1 #3、取出…

    Linux干貨 2016-09-15
欧美性久久久久