一、什么是OpenSSL
在電腦網絡上,OpenSSL是一個開放源代碼的軟件庫包,應用程序可以使用這個包來進行安全通訊,避免竊聽,同時確認另一端連接者的身份。這個包廣泛被應用在互聯網的網頁服務器上。其主要庫是以C語言所寫成,實現了基本的加密功能,實現了SSL與TLS協議。
OpenSSL由三部分組成:
libencrypto庫
libssl庫
openssl多用途命令行工具
二、OpenSSL加密算法和協議
1、對稱加密算法
特性:
加密、解密使用同一個密鑰
將原始數據分割成為固定大小的塊,逐個進行加密
缺陷:
密鑰過多
密鑰分舵困難
常用算法:
DES、3DES、AES、Blowfish、Twofish等等
2、公鑰加密算法
密鑰分為公鑰與私鑰:
公鑰:從私鑰中提取產生;可以公開給所有人
私鑰:通過工具闖將,使用者自己留存,必須保證其私密性
特點:用公鑰加密的數據,只能使用與之對應的私鑰解密,反之亦然
用途:
數字簽名:主要用于讓接收方確認發送放的身份
密鑰交換:發送發用對方公鑰加密一段對稱密鑰,并發送給對方
算法:
RSA:1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的,RSA就是他們三人姓氏開頭字母拼在一起組成的。
DSA:Digital Signature Algorithm 數字簽名算法
3、單向加密
特性:定長輸出、雪崩效應
# 雪崩效應指,其中以為發生變化,都會給結果帶來翻天覆地的變化
功能:數據完整性
算法:
md5:Message Digest 5, 128bits 消息摘要
sha1:Secure Hash Algorithm 1, 160bits 安裝的hash算法
sha224、sha256、sha384、sha512(都為sha家族,224長度為224位,其他意義相同)
4、密鑰交換
公鑰加密:通過獲取對方的公鑰對數據進行加密,只有對方的私鑰才能解密
DH算法(Deffie-Hellman):由兩個人名組成
三、公鑰加密解密過程圖解
四、各加密算法管理命令
openssl:默認在Centos 7上面默認安裝,可以直接使用,有很多子命令可以分別管理。
子命令分為三類:
標準命令
信息摘要命令(dgst命令)
加密命令(enc子命令)
標準命令:enc,ca,req,genrsa等等
1、對稱加密
工具:openssl enc
支持的算法: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
2、單向加密
工具:openssl dgst,md5sum,sha1sum,sha224sum等等
dgst命令:
# openssl dgst -md5 /PATH/TO/SOMEFILE
# openssl dgst -md5 /etc/fstab MD5(/etc/fstab)= e5ee5d6d40cf1983771c8650df455135 # md5sum /etc/fstab e5ee5d6d40cf1983771c8650df455135 /etc/fstab # sha1sum /etc/fstab 5f3a9f070f56a355ca68d86028c95dca5c4bcb2f /etc/fstab # sha224sum /etc/fstab fd8e80dc3e6479d254b50e7f0c05d7897a99ed951c3f81ec1fec362a /etc/fstab # sha512sum /etc/fstab 9893ded3aa749d79e6e714dd3ca81454e05243f7655633cef06719365c1e7b27a372705752ac751a2adeced881952627d02767c9aa305db31ee1de87b428804a /etc/fstab
3、生成用戶密碼
工具:passwd,openssl passwd
# openssl passwd -1 -salt $(openssl rand -hex 10) Password: $1$0d9d2f2e$Ty3KtAwkijG5zIU08ixay.
4、生成隨機數
工具:openssl rand
# openssl rand -hex NUM
# openssl rand -base NUM
# openssl rand -hex 10 6d989f629da63bb40948 # openssl rand -base64 10 3JXUSebo5uMlfw==
# 注意復制base64的隨機數時,不要復制后門的“==”號
5、公鑰加密
生成密鑰:
生成私鑰: # (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公鑰: # openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
# 注意:因為私鑰必須保證其安全,所以其umask應該為077,放在括號中執行,表示在子shell中執行,可以不影響當前shell
# (umask 077;openssl genrsa -out /opt/http) Generating RSA private key, 1024 bit long modulus .........................++++++ ...............++++++ e is 65537 (0x10001) # openssl rsa -in /opt/http -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCw554Lm/+x+eGJRfqk5YpDLkLj NvAO2t8P6DQHc5l2pnm1vw6KnWTPB0V4S2P87E2fI1QV0RplTD832FBpina/fsz4 iGjv1CfjA8kwQ0wMJfrqqtOHAsmeKUmAqJvtSGhLy8b0Lx1AWxGBPKg32PmmhCQE tnROn/cXwb8Od80unwIDAQAB -----END PUBLIC KEY-----
五、PKI及創建私有CA
PKI:公鑰基礎設施(Public Key Infrastructure)
簽證機構:CA
注冊機構:RA
證書吊銷列表:CRL
整數存取庫
SSL:Secure sockets Layer
由Netscape公司在1994年研發,其版本有V1.0,V2.0,V3.0 其中V3.0最為主流,但是前一段時間google驗證出其有bug,所以建議使用TLS
TLS:Transport Layer Security
有IETF研發:其版本有V1.0, V1.1, V1.2, V1.3主流版本為V1.2
創建私有CA:
openssl命令:
配置文件:/etc/pki/tls/openssl.cnf
在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可
步驟:
(1) 生成私鑰;
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
(2) 生成自簽證書;
# openssl req -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
測試并申請簽署證書:
步驟:(以httpd為例)
(1) 用到證書的主機生成私鑰;
# mkdir /etc/httpd/ssl # cd /etc/httpd/ssl # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) 生成證書簽署請求
# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365[object Object]
(3) 將請求通過可靠方式發送給CA主機;
這里使用scp(本次僅用于測試使用,密鑰傳輸時必須保證其安全,可以使用u盤復制)
# scp httpd.csr 172.18.250.108:/opt/ root@172.18.250.108's password: httpd.csr 100% 1094 1.1KB/s 00:00
(4) 在CA主機上簽署證書;
# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1(0x2) Validity Not Before: Apr 10 15:45:54 2016 GMT Not After : Apr 10 15:45:54 2017 GMT Subject: countryName = CN stateOrProvinceName = beijing organizationName = ops organizationalUnitName = ops commonName = ops.com emailAddress = admin@ops.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 08:A3:DD:98:D3:E0:42:58:5E:B7:24:43:6C:3D:B1:D8:02:34:16:46 X509v3 Authority Key Identifier: keyid:75:63:44:2C:46:80:2F:84:CE:EF:C6:F1:F2:E7:75:2E:EF:17:37:C2 Certificate is to be certified until Apr 10 15:45:54 2017 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
查看證書中的信息:
# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
對于SSL就寫到這里了,感覺寫的不錯可以給點個贊。
作者:Ace
QQ1257465991
Linux運維攻城獅一只
Q/A:如有問題請慷慨提出
原創文章,作者:Ace,如若轉載,請注明出處:http://www.www58058.com/15242