PKI:Public Key Infrastucturegit
openssl: 套件,開源程序算法
libcrypto通用功能的加密庫shell
libssl用於實現TLS/SSL的功能數據庫
openssl多功能命令行工具編程
openssl可用於:生成密鑰、建立數字證書、手動加密解密數據安全
加密解密技術經常使用的功能及算法:bash
對稱加密:(用於加密數據)服務器
算法:DES, 3DES, AES, Blowfish, Twofish, RC6, CAST5網絡
工具:gpg, openssl encdom
# openssl enc -des3 -a -salt -in /path/to/input_file -out /path/to/cipher_file
# openssl enc -d -des3 -a -salt -in /path/to/cipher_file -out /path/to/clear_file
單向加密:(抽取數據特徵碼,用於驗證數據的完整性)
特性:
One-Way
Collision-free
算法:
md5128bits
sha1160bits
sha512512bits
工具:sha1sum, md5sum, cksum, openssl dgst
# openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] /path/to/somefile
MAC: 消息摘要碼,單向加密的延伸應用(在單向加密的基礎上再對抽取的數據特徵碼進行加密)
應用:用於實如今網絡通訊中保證所傳輸的數據完整性;
機制:
CBC-MAC
HMAC:使用md5和sha1算法;
用戶認證:
工具:passwd, openssl passwd
# openssl passwd -1
公鑰加密:公鑰加密、私鑰解密
密鑰對兒:
公鑰:pkey
私鑰:skey
算法:RSA, EIGamal
工具:gpg, openssl rsautl
數字簽名:私鑰加密、公鑰解密
算法:RSA, EIGamal, DSA
DSA: Digital Signature Algorithm
DSS: Digital Signature Standard
密鑰交換:IKE
算法:DH, 公鑰加密
Diffie-Hellman
數字證書:
證書格式:x50九、pkcs
x509格式:
公鑰和有效期限;
持有者的我的合法身份信息;(主機名)
證書的使用方式;
CA的信息;
CA的數字簽名;
誰給CA發證:自簽署證書
配置文件:/etc/pki/tls/openssl.cnf
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept CA工做目錄
certs = $dir/certs # Where the issued certs are kept 簽署證書存放目錄
crl_dir = $dir/crl # Where the issued crl are kept 吊銷列表存放目錄
database = $dir/index.txt # database index file. 索引數據庫
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs. 新證書存放目錄
certificate = $dir/cacert.pem # The CA certificate CA自簽署證書
serial = $dir/serial # The current serial number 證書的序列號
crlnumber = $dir/crlnumber # the current crl number 吊銷列表的序列號
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL 正用吊銷列表
private_key = $dir/private/cakey.pem# The private key CA本身的私鑰
RANDFILE = $dir/private/.rand # private random number file 隨機數文件
x509_extensions = usr_cert # The extentions to add to the cert
用openssl實現私有CA:
生成密鑰對兒:
# (umask 077; openssl genrsa -out private/cakey.pem 2048)
若是想查看公鑰:
# openssl rsa -in private/cakey.pem -pubout -text
生成自簽證書:
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
建立須要的文件:
# touch index.txt serial crlnumber
用openssl實現證書申請:
在主機上生成密鑰,保存至應用此證書的服務的配置文件目錄下, 例如:
# mkdir /etc/httpd/ssl
# cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024)
生成證書籤署請求:
# openssl req -new -key httpd.key -out httpd.csr
將請求文件發往CA;
CA簽署證書:
簽署:
# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS
將證書傳回請求者
吊銷證書:
# openssl ca -revoke /path/to/somefile.crt
openssl: 多用途的命令行工具
標準命令:enc, dgst, genrsa, rsautl, req, ca, rsa, passwd
speed: 基準性能測試工具
version:版本查看
s_client:SSL/TLS client program
rand: 生成僞隨機數
# openssl rand -hex #
ssl:
NetScape 網景
Secure Socket Layer
SSLv2, SSLv3
TLS: Transport Layer Security
TLSv1
http --> https
ldap --> ldaps
ftp --> ftps
smtp --> smtps
pop3 --> pop3s
imap --> imaps
openssl補充材料:
openssl中有以下後綴名的文件
.key格式:私有的密鑰
.crt格式:證書文件,certificate的縮寫
.csr格式:證書籤名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫
.crl格式:證書吊銷列表,Certificate Revocation List的縮寫
.pem格式:用於導出,導入證書時候的證書的格式,有證書開頭,結尾的格式
經常使用證書協議
x509v3: IETF的證書標準
x.500:目錄的標準
SCEP: 簡單證書申請協議,用http來進行申請,數據有PKCS#7封裝,數據其實格式也是PKCS#10的
PKCS#7: 是封裝數據的標準,能夠放置證書和一些請求信息
PKCS#10: 用於離線證書申請的證書申請的數據格式,注意數據包是使用PKCS#7封裝這個數據
PKCS#12: 用於一個單一文件中交換公共和私有對象,就是公鑰,私鑰和證書,這些信息進行打包,加密放在存儲目錄中,CISCO放在NVRAM中,用戶能夠導出,以防證書服務器掛掉能夠進行相應恢復。思科是.p12,微軟是.pfx
ssh: Secure SHell
監聽tcp協議的22號端口
ssh文本協議:字符通訊
sshv1, sshv2
因爲sshv1是基於CRC-32作MAC,所以,不安全,建議勿用;
sshv2基於雙方主機協商選擇最安全的MAC實現機制;
加密機制及MAC機制是雙方協商選定;
基於DH實現密鑰交換,基於RSA或DSA實現身份認證;
客戶經過檢查服務端的主機密鑰來斷定是否與其進一步通訊;
OpenSSH (C/S)
Server: 程序(服務)監聽tcp:22
Client: 程序
Windows客戶端:xmanager(xshell)、SecureCRT、putty、sshshellclient
openssh客戶端組件:
ssh:
ssh Username@HOST [COMMAND]
ssh -l Username HOST [COMMAND]
-p PORT: 指定要連入端口;
ssh認證機制:
基於口令
基於密鑰
客戶端在本地生成一對密鑰;
客戶端將公鑰複製到服務端,要登陸的用戶的家目錄下的隱藏目錄.ssh中的一個名爲authorized_keys或authorized_keys2文件中
配置過程:
一、生成密鑰對兒
# ssh-keygen -t rsa
生成的密鑰默認保存至當前用戶家目錄下的.ssh目錄的id_rsa文件中,公鑰在id_rsa.pub文件中
二、複製密鑰至遠程主機
# ssh-copy-id [-i /path/to/pubkey_file] Username@HOST
scp: 類cp命令,基於ssh協議跨主機複製
scp SRC1 SRC2 ... DEST
分兩種狀況:
一、源文件在本機,目標爲遠程
# scp /path/to/somefile ... Username@HOST:/path/to/somewhere
二、源文件在遠程,目標爲本機
# scp Username@HOST:/path/to/somefile /path/to/somewhere
-r: 源文件爲目錄時使用,以實現遞歸複製
-p: 保留源文件的複製及修改時間戳,以及權限;
-q: 靜默模式
-P PORT:指定服務端端口;
sftp: 是基於ssh的ftp協議
只要OpenSSH的服務器端配置文件中啓用了以下項:
Subsystemsftp/usr/libexec/openssh/sftp-server
用法:# sftp [username@]HOST
服務器端:sshd
配置文件:/etc/ssh/sshd_config
服務腳本:/etc/rc.d/init.d/sshd
腳本配置文件:/etc/sysconfig/sshd
各配置參數:# man sshd_config
Port
ListenAddress: IP
Protocol
PermitRootLogin
AllowUsers user1,user2,...: 用戶白名單
AllowGroups
DenyUsers : 用戶黑名單
使用SSH的最佳實踐:
一、Only Use SSH Protocol 2
二、Limit Users' SSH Access
AllowUsers root vivek jerry
白名單
DenyUsers saroj anjali foo
黑名單
三、Configure Idle Log Out Timeout Interval
ClientAliveInterval 300
ClientAliveCountMax 0
設定空閒會話超時時長;
四、Firewall SSH Port # 22
使用iptables設置ssh服務安全訪問策略;
五、Change SSH Port and Limit IP Binding
Port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5
勿使用默認22端口;
六、Use Strong SSH Passwords and Passphrase
genpasswd() {
local l=$1
[ "$l" == "" ] && l=20
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}
使用足夠長、足夠複雜的密碼,且按期更換;
七、Use Public Key Based Authentication
使用公鑰認證
八、Disable Empty Passwords
九、Thwart SSH Crackers (Brute Force Attack)
google: ssh best practice
十、 Rate-limit Incoming Port # 22 Connections
限制ssh訪問頻度;
十一、Use Log Analyzer
記錄好日誌,常常作日誌分析;
用戶登陸信息獲取:
/var/log/wtmp:用戶成功登陸的日誌信息
last
/var/log/btmp: 用戶登陸嘗試失敗的日誌信息
lastb
lastlog: 每一個用戶最近一次成功登陸的信息;
bash編程的信號捕獲:
kill -l
KILL沒法捕捉;
trap 'COMMAND' SIGNAL,
信號捕捉用於:在中途停止時作一些清理操做;
使用示例:
#!/bin/bash
#
trap 'echo "quit"; exit 5' INT
for i in {1..254}; do
if ping -w 1 -c 1 172.16.254.$i &> /dev/null; then
echo "172.16.254.$i is up."
else
echo "172.16.254.$i is down."
fi
done