PKI:公鑰基礎設施,保證服務器向客戶端發送的證書的可靠性;html
簽證機構:CAlinux
註冊機構:RA算法
證書吊銷列表:CRLshell
證書存取庫:CAB安全
威瑞信——verisign服務器
GlobalSign架構
賽門鐵克併發
AsiaCOMdom
國際標準化組織定義了證書的標準結構,X.509協議標準:ssh
證書的內容:
證書的版本號;
證書的序列號;
簽名算法ID;
證書擁有者的信息;
證書有效期;
主體名稱;
主體公鑰;
主體的惟一標識;
發證者的惟一標識;
發證者的數字簽名;
擴展信息;
可以實現SSL/TLS安全協議的應用程序:
OpenSSL(SSL/TLS),gpg(PGP,TLS)
OpenSSL及其組件:
OpenSSL是一個開源實現SSL/TLS的標準;
libcrypto:實現加解密的算法的庫;
libss:實現SSL功能的庫;
openssl:多用途命令行工具;
openssl命令行工具:
衆多的子命令實現各類安全加密功能;
標準命令:
dgst, enc, ca, req, genrsa, rand, crl, passwd, x509,...
消息摘要命令:
使用dgst子命令來調用,爲dgst子命令提供加密算法(單向加密算法);
加密命令:
使用enc子命令來調用,爲enc子命令提供加密算法(對稱加密算法);
項目案例:
1.使用openssl加密:
對稱加密:openssl enc
openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/-base64] [-salt]
經常使用選項:
-ciphername:算法名稱,包括des3,des,aes,rc4,...
-e:加密
-d:解密
-a/-base64:純文本格式編碼;
-salt:加隨機鹽
-in filename:要加密的文件路徑;
-out filename:加密以後的文件的輸出路徑;
加密示例:
~]# openssl enc -e -des3 -a -salt -in /PATH/TO/SOME_FILE -out /PATH/TO/SOME_ENCRYPTED_FILE
~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
解密示例:
~]# openssl enc -d -des3 -a -salt -in /PATH/TO/SOME_ENCRYPTED_FILE -out /PATH/TO/SOME_FILE
~]# openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab
單向加密:openssl dgst
openssl dgst -ciphername /PATH/TO/SOME_FILE
示例:
openssl dgst -md5 fstab
2.使用openssl生成隨機數:
openssl rand命令:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
openssl rand -base64|-hex LENGTH(bytes)
3.生成用戶密碼:
openssl passwd命令:
openssl passwd [-1] [-salt string]
~]# openssl passwd -1 -salt $(openssl rand -base64 5)
4.公鑰加密算法:RSA,ELGamal;
openssl genrsa命令:生成RSA算法的私鑰
openssl rsa命令:從私鑰中提取RSA公鑰
openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbits]
示例:
~]# (umask 077; openssl genrsa -out myp.key2 4096) 建議使用
~]# (umask 077; openssl genrsa 4096 > myp.key3)
openssl rsa
openssl rsa [-in filename] [-out filename] [-pubout]
示例:
openssl rsa -in myp.key2 -out mykey.pub
5.創建私有CA:(OpenCA)
1.建立CA所在主機的私鑰文件;
2.生成自簽證書;
3.爲CA提供必要的目錄級文件及文本格式的文件;
目錄級文件:
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
文本格式文件:
/etc/pki/CA/serial
建立serial文件的時候,須要給該文件提供一個初始序列號,通常01;
/etc/pki/CA/index.txt
CA的專有配置文件:/etc/pki/tls/openssl.cnf
CA公鑰保存位置:/etc/pki/CA/cacert.pem
CA私鑰保存位置:/etc/pki/CA/private/cakey.pem
建立私有CA的步驟:
1.建立CA的私鑰文件:
~]# (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 3653
-new:生成新證書籤署請求;
-x509:生成自簽證書,專用於私有CA的自簽證書的頒發;
-key:指定CA的私鑰文件的路徑
-out:生成的自簽證書所保存的路徑
-days:設置證書有效期限;單位是天
3.知足CA所必須的目錄級文件和文本文件的佈局:
~]# touch /etc/pki/CA/index.txt
~]# echo 01 > /etc/pki/CA/serial
SSL:https --> http over ssl
全棧HTTPS機制;
https實現方式:
1.在某臺服務器上安裝了httpd程序;
2.建立服務器的私鑰文件:
~]# mkdir /etc/httpd/conf/ssl
~]# cd /etc/httpd/conf/ssl
ssl]# (umask 077 ; openssl genrsa -out /etc/httpd/conf/ssl/httpd.key 4096)
3.生成證書請求文件:
ssl]# openssl req -new -key /etc/httpd/conf/ssl/httpd.key -out /etc/httpd/conf/ssl/httpd.csr -days 3653
4.由CA簽發證書:在CA所在的服務器上完成;
~]# openssl ca -in /tmp/csrs/httpd.csr -out /tmp/csrs/httpd.crt -days 365
5.在CA上查看證書內容:
~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serial -subject
吊銷證書:須要在CA上執行;
1.獲取客戶端證書相應的序列號:
~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serial
2.吊銷證書:
~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
注意:SERIAL應該換成對應證書的序列號;
3.生成吊銷證書的吊銷編號:第一次吊銷證書的時候,必須作此步驟;
echo "SERIAL" > /etc/pki/CA/crlnumber
注意:SERIAL應該換成對應證書的序列號;
4.更新證書吊銷列表:
~]# openssl ca -genctl -out /etc/pki/CA/ca.crl
使用gpg實現對稱加密
對稱加密file文件
gpg -c file
ls file.gpg
解密file
pgp -o file2 -d file.gpg
使用gpg工具實現公鑰加密
在hostA主機上生成公鑰/私鑰對
gpg --gen-key
在hostA主機上查看公鑰
gpg --list-keys
在hostA主機上導出公鑰到link.pubkey
gpg -a --export -o link.pubkey
從hostA主機上覆制公鑰文件到需加密的B主機上
scp link.pubkey hostB:
在需加密數據的hostB主機上生成公鑰/私鑰對
gpg --list-keys
gpg --gen-key
注意:若是系統提醒熵池中隨機數不夠用,可使用下列命令:
~]# rngd -r /dev/urandom
在hostB主機上導入公鑰
gpg --import link.pubkey
gpg --list-keys
用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg
gpg -e -r link.pubkey file
file file.gpg
複製加密文件到hostA主機
scp fstab.gpg hostA:
在hostA主機解密文件
gpg -d file.gpg gpg -o file -d file.gpg
刪除公鑰和私鑰
gpg --delete-secret-keys qhdlink
gpg --delete-keys qhdlink
注意:應該先刪私鑰,再刪公鑰;
OpenSSH:
實施遠程登陸的服務器端應用程序;
什麼是登陸?
在分時系統中,容許多個用戶同時使用一臺計算機的資源,爲了保證安全以及更方便的記錄不用用戶的操做行爲,系統爲每一個用戶創建一個邏輯身份,即用戶的帳戶標識;爲了對用戶進行身份覈實,還爲用戶指定了口令。用戶在使用該系統以前須要輸入這個邏輯標識以及口令,這個驗證過程就叫"登陸"。
遠程登陸:
Telnet:
C/S: 默認不容許管理員直接遠程登陸;
Client:telnet
Server:telnet-server
Socket Pair:23/TCP
安裝telnet-server:本地光盤yum源中;
CentOS 6:關閉防火牆和SElinux
~]# chkconfig telnet on
~]# service xinetd start
CentOS 7:關閉防火牆和SElinux
~]# systemctl start telnet.socket
注意,telnet默認不容許root用戶直接登陸;
SSH: Secure SHell,安全的shell;
用於取代較早的很是不安全的telnet協議;
C/S:22/TCP
Client:OpenSSH(ssh,scp,sftp),Xshell,SecureCRT,sshsecureshellclient,putty
Server:OpenSSH(sshd), dropbear(dropbear)
SSH協議:
V1:不安全,禁用;
V2:當前安全的應用協議;
SSH提供的認證方式:
基於口令的認證;
基於密鑰的認證;
用戶提供一對兒密鑰,私鑰保存在客戶端,公鑰保存在遠程服務器端某個用戶的家目錄下;
OpenSSH應用程序具體使用
Openssh的組成:
服務端程序:sshd,/etc/ssh/sshd_config
客戶端程序:ssh,/etc/ssh/ssh_config;scp,sftp
客戶端程序:
ssh命令:
ssh — OpenSSH SSH client (remote login program)
ssh [options]... [user@]hostname [command]
經常使用選項:
-l user:指定這次使用哪一個用戶進行遠程登陸;若是使用了此選項,則ssh命令中的主機名前面的用戶名須要省略;
注意:若是沒有使用-l選項指定用戶,又沒有在主機名前面加用戶名,則ssh客戶端程序默認使用本地主機當前登陸的用戶的用戶名做爲這次遠程登陸的用戶名;
-p port:指明用於訪問遠程服務器的目標端口號;
-b bind_address:指明這次訪問的服務器的固定源IP地址;
-X:支持X11轉發;
-Y:支持受信任的X1轉發;
ssh遠程鏈接服務器時的配置選項很是複雜,這些選項均可以定義在ssh的配置文件中:/etc/ssh/ssh_config
其格式:
HOST pattern
OPTION1 VALUE
OPTION2 VALUE
...
基於密鑰的認證機制:
用戶提供一對兒密鑰,私鑰保留在客戶端,公鑰分發並保留至遠程服務器端某個用戶的家目錄中;
1.建立密鑰對兒:
ssh-keygen命令:
ssh-keygen — authentication key generation, management and conversion
用法:
ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]
經常使用選項:
-q:靜默模式;
-b bits:指定建立的密鑰的長度;
RSA:最少768bits,默認2048bits;
DSA:明確指定1024bits
ECDSA:256bits,384bits,521bits;
ED25519:忽略-b指定的長度;
-t type:指明公鑰加密算法的類型
在ssh協議V2中可使用:「dsa」, 「ecdsa」, 「ed25519」, or 「rsa」
-f output_keyfile:指定生成的密鑰文件的路徑;
-P passphrase:指明私鑰的加密密碼;
ssh-copy-id命令:
ssh-copy-id — use locally available keys to authorise logins on a remote machine
用法:
ssh-copy-id [-i [identity_file]] [-p port] [user@]hostname
經常使用選項:
-i:指定要複製的公鑰文件;
-p port:指定鏈接到的服務器端的端口;
經常使用的ssh密鑰驗證的操做過程:
1.生成密鑰對
ssh-keygen -t rsa -P 'passphrase' -f /PATH/TO/KEY_PAIR
2.發送公鑰到目標服務器某個用戶的家目錄:
ssh-copy-id -i /PATH/TO/PUBLIC_KEY user@HOSTNAME
3.遠程登陸:
ssh -l user HOSTNAME
ssh user@HOSTNAME
scp命令:基於ssh鏈接完成的複製命令;
scp - secure copy (remote file copy program)
兩種使用情形:
推送:Push
scp [options]... SRC HOST:/PATH/TO/DEST
拉取:Pull
scp [options]... HOST:/PATH/FROM/SRC DEST
經常使用選項:
-r:遞歸複製,複製目錄內容;
-p:保留源文件的權限信息;
-q:靜默模式
-P port:指明遠程主機ssh協議監聽的端口;
sftp:
ftp over ssh;
ftp over ssl(ftps);
C/S架構
S:sftp-server,有sshd服務進程管理的一個子服務項目,是sshd的一個子系統;在CentOS系統中默認是啓用的;
C:sftp命令
sftp [user@]HOSTNAME
sftp> help 獲取幫助
ssh協議客戶端工具:ssh,scp,sftp
ssh協議的服務器端工具:
sshd程序:/etc/ssh/sshd_config
格式:
配置指令 值
經常使用的指令:
Port 22:指明sshd服務要監聽的端口號;通常在生成環境的服務器端,須要修改這個指令的值爲非22號端口;
ListenAddress 0.0.0.0:指明sshd服務進程要監聽的IP地址;建議監聽某個特定的IP地址,以提升安全性;
Protocol 2:選擇ssh協議的版本;
PermitRootLogin yes:是否容許使用root直接完成遠程登陸;在生產環境的服務器中,應該禁用此功能;
UseDNS yes:是否容許使用DNS反向解析主機名;建議關閉此功能;
AllowUsers user1 user2 ...:設置登陸用戶的白名單;
AllowGroups group1 group2 ...:設置組的白名單;
DenyUsers user1 user2 ...:設置登陸用戶的黑名單;
DenyGroups group1 group2 ...:設置組的黑名單;
注意:對於/etc/ssh/sshd_config配置文件作出修改以後,必須讓sshd服務器進程從新讀取該配置文件,才能使新配置生效;
# systemctl reload sshd.service
# service sshd reload
ssh服務的最佳實踐方案:
1.不要使用默認的22號端口;
2.禁止使用sshv1;
3.設置可登陸的白名單或黑名單;
4.設置空閒會話的超時時長;
5.利用防火牆來設置ssh訪問安全策略和規則;
6.僅監聽特定IP地址,不要設成0.0.0.0;
7.若是必須使用口令認證,則使用複雜密碼;
8.建議最好使用基於密鑰的認證;
9.禁止使用空密碼;
10.禁止root用戶直接遠程登陸;
11.限制ssh的訪問頻度和併發數;
12.作好日誌,常常分析;
dropbear
ssh協議的另外一種實現
輕量級的實現方案,多用於嵌入式環境;
dropbear的rpm包,在EPEL源中;
mirrors.sohu.com/fedora-epel/$releasever/$basearch
mirrors.aliyun.com
mirrors.163.com
mirrors.tsinghua.edu.cn
可使用dropbear源代碼包進行編譯安裝;
源代碼包能夠在https://matt.ucc.asn.au/dropbear/dropbear.html下載;
編譯環境:
yum groupinstall "Development tools" "Server Platform Development"
yum install zlib-devel(可選)
若是選擇了編譯源代碼的方式進行安裝:
1.解壓以後的目錄中,有一個INSTALL的文件,查看該文件以得到安裝方法
2.~]# ./configure
3.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert"
4.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert" install
啓動dropbear:
dropbear -h
dropbearkey -h
獲取相應的幫助信息;
1.建立保存密鑰文件的目錄:
~]# mkdir /etc/dropbear
2.建立對應密鑰:
~]# dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key
~]# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
~]# dropbearkey -t ecdsa -s 521 -f /etc/dropbear/dropbear_ecdsa_host_key
3.啓動dropbear服務,並使其運行於前臺;
~]# dropbear -p IP:PORT -F -E
選項含義:
-p IP:PORT:指定這次啓動的dropbear服務進程監聽的套接字;
-F:將dropbear服務進程運行於前臺;
-E:將dropbear服務進程運行期間產生的信息從標準錯誤輸出而不是寫入到系統日誌文件(syslog, /var/log/messages);
-w:禁止root用戶直接登陸到dropbear服務器;
客戶端訪問:
~]# ssh -p PORT user@host
~]# dbclient -p PORT user@host