馬哥筆記第十七天openssl、CA、scp、sftp、ssh

1、加密算法和協議類型:
           對稱加密:任意加密數據塊和流的內容,加密和解密用同一個密碼。
                    通常明文(clear text)通過算法和密鑰生成密文,再由接受者用相同的密鑰和算法解密獲取明文。
                     算法:(DES、3DES、AES現在使用比較廣、Blowfish、Twofish、IDEA、RC6、CAST5)
                     特性:加密、解密使用同一口令。將明文分隔成固定大小的塊,逐個進行加密
                     缺陷:密鑰過多、密鑰傳輸不安全、密鑰交換、身份驗證。

           公鑰加密:非對稱加密,加密解密用不同密碼分公鑰和私鑰,公鑰是從私鑰中提取,公鑰可以給別人,私鑰保密。
                      密鑰:公鑰和私鑰是成對出現的。公鑰包含在私鑰中,公鑰稱爲public key、私鑰爲secret key,由發起者對接受者索要公鑰,用公鑰加密數據後發送給接受者。接受者用算法和私鑰解密。運用場景:身份認證(認證協議)、密鑰交換(DH算法)。
                      缺陷:加密、解密時間過長一般不用於簡單通信,大致是對稱加密的1000倍
                      
           單項加密:數據完整性算法,抽取數據特徵碼並且在二次抽取後跟此前特徵碼做比較以確保數據沒有被竄改。
                      單項機密也叫數據完整性校驗,定長輸出、雪崩效應。單項加密有這幾種方式:MD5、SHA1、SHA256、SHA384、SHA512

           認證協議:用來確定通信方的真實性。
   
            發起者用單項算法計算數據的特徵碼,用自己的私鑰計算特徵碼附加在數據後面,在用對稱密鑰對整個包(數據和加特徵碼)進行加密,並用接受者的公鑰加密對稱加密密碼,附加在整個包中一併發給對方。接受者用自己的私鑰解密獲取對稱加密密碼,得到密碼後解密整個包獲得數據和特徵碼,在用相同的算法計算特徵碼,用對方的公鑰解密數據驗證對方身份,用對方計算結果(特徵碼)和解析結果(特徵碼)進行對比,來驗證數據的完整性。         
       
2、ca最新版證書,x.509: 定義了證書結構和認證協議標準;證書格式大概保函(版本號、證書的序列號、算法和參數、發行者名稱、有效期限、主體名稱(此證書的擁有者)、公鑰、發行者id、主體id、ca簽名)

           PKI:公開密鑰基礎設施(Public Key Infrastructure),是現在互聯網安全基礎規範

           ssl:安全套接字層(Secure Socket Layer)目前使用lssv3版本。瀏覽器與Web服務器之間的身份認證和加密數據傳輸。 (應用層、傳輸層、網絡層、鏈路層、物理層)工作在傳輸層和各應用層之間,用戶可以選擇是否使用ssl進行傳輸。如果http使用ssl協議將調用ssl函數庫端口也會發生變化。http(80/tcp) --> ssl --> https(443/tcp)

           1.鑑定證書是否合法、2、驗證證書的完整性、3、驗證主機的名稱和申請者名稱是否相同、4、檢查證書的有效期、5、檢查證書是否已經被吊銷,這些步驟就稱爲PKI
 
           ssl會話建立模型。在基於tcp/ip協議建立3次握手後,服務端會把ca證書發送給客戶端,客戶端得到證書後通過ca公鑰進行解密ca簽名,能解密證明該證書是可信任的、把解密出來的數據和重新計算出來的特徵碼對比對確保完整性、驗證主機的名稱和申請者名稱是否相同,驗證通過後客戶端會取得服務器端公鑰信息,客戶端用公鑰生成個一次性的對稱加密密碼發給服務器端。服務器端獲取密碼後加密網頁數據發給客戶端。

           Linux:gpg, (pgp); openssl
                       openssl:
                                    openssl: 多用途命令行工具,各功能分別使用子命令實現
                                    libcrypto: 公共加密庫
                                    libssl: ssl協議的實現

             對稱加密工具:gpg、openssl enc
                            算法:DES, 3DES, AES, Blowfish, Twofish, RC6, idea, CAST5

                        openssl命令選項:
                                      enc:對稱加密程序
                                      -e:指定爲加密,可以不寫默認爲加密。
                                      -des3:指定算法算法
                                      -salt:默認設置,可以不寫。生成一段字符串放在密碼最前面進行加密,提高解密難度。
                                      -a:基於base64處理數據。加密結果進行base64編碼處理
                                      -in:讀取那個文件進行加密
                                      -out:輸出到那裏
                                      -d:指定爲解密
                             加密文件: openssl enc -e -des3 -a -salt -in test.sh -out ./test.txt
                             解密文件:openssl enc -d -des3 -a -salt -in test.txt -out ./test.sh 
 
               單項加密:單向的(One-Way)、沒有衝突的(Collison-free)
                               算法:md5: 128bits、sha1: 160bits、sha256、sha384、sha512
                              工具:md5sum, sha1sum, openssl dgst, 
                              
                              openssl dgst:實現單項加密
                                           -md5:用md5方式加密
                                           -sha1:sha1方式加密
                                           -out:加密後密碼保存到那裏
                         示例:openssl dgst [-md5|-sha1] [-out /path/to/filename] /path/from/somefile
                                    openssl dgst -md5 test.sh 或openssl dgst -md5 -out ./123a test.sh
                                    md5sum test.sh或openssl dgst -sha1 test.sh
 
                   openssl:MAC:消息摘要碼,單向加密的一種延伸類的應用,用於實現在網絡通信中保證所傳輸的數據的完整性
 
                  用戶密碼:openssl passwd
                                -1:md5加密、
                                -salt:自己指定附加信息。
                                例如:openssl passwd -1 -salt asdqwezx 123456:123456爲密碼,asdqwezx 爲-salt附加信息
                 
                  生成隨機數:openssl rand -base64 4或者openssl rand -hex 4。根據指定編碼生成8位隨機數。指定4就是8位
                            例如:openssl passwd -1 -salt `openssl rand -base64 4` 123456 隨機生成密碼串。 
                 
                  公鑰加密:
                                  算法:RSA, EIGamal
                                  工具:gpg, openssl rsautl
 
                  生成密鑰:
                                (umask 077; openssl genrsa  -out /path/to/keyfile NUMBEROFBITS )
                               (umask 077;openssl genrsa -out ./mykey 2048)生成一個只有當前用戶可以讀取的2048字節mkkey私鑰文件

                                 提出公鑰:
                                openssl rsa -in ./mykey -pubout,-pubout表示提取公鑰信息,以上面私鑰文件生成公鑰

3、openssl建立私有CA:配置文件在:/etc/pki/tls/openssl.cnf
                 生成密鑰、自簽證書、
                  
                 節點:生成密鑰對兒、生成證書籤署請求、把請求發送給CA
                 CA:驗正請求者信息、簽署證書、把簽好的證書發送給請求者

          建立CA服務器:
                  (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)生成私鑰,文件名根據配置文件中命名

         自簽證書:
                       req: 生成證書籤署請求
                       -news: 新請求
                       -key /path/to/keyfile: 指定私鑰文件
                       -out /path/to/somefile:輸出文件到那裏
                       -x509: 生成自簽署證書
                       -days n: 有效天數
                   openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
 
         初始化工作環境:
                        touch /etc/pki/CA/{index.txt,serial}
                        echo 01 > /etc/pki/CA/serial
 
        節點申請證書:
                        生成密鑰對兒:(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
                        生成證書籤署請求:openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr。在填寫詳細信息是需要和服務器建立的詳細信息一致。
                        把簽署請求文件發送給CA服務:scp

       CA簽署證書:
                        驗正證書中的信息:
                        簽署證書:openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
                        發送給請求者:

      吊銷證書:
                       申請吊銷證書的節點,獲取證書號:openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject          
                       CA:
                        根據節點提交的serial和subject信息來驗正與index.txt文件中的信息是否一致
                        吊銷證書:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem       
                        生成吊銷證書的編號(如果是第一次吊銷需創建文件):echo 00 > /etc/pki/CA/crlnumber      
                        更新證書吊銷列表:openssl ca -gencrl -out /etc/pki/CA/crl/thisca.crl
                        如果需要,查看crl文件的內容:openssl crl -in /path/to/crlfile.crl -noout -text

 博客作業:加密、解密圖文並茂說明白;openssl自建CA的詳細過程

4、telnet & ssh
       早期遠程連接計算機都是用telnet方式,它工作在tcp23端口上,因爲沒有考慮到安全,所以在連接時所有通訊都以明文方式實現。它禁止管理直接登錄。它的安裝包有telnet客戶端和telnet-server端,進程被超級進程xinetd管理

       ssh(secure shell)出現是爲了彌補telnet不安全連接,它工作在tcp22端口上,現在我們使用的都爲sshv2版本。
               sshv2基於雙方主機的協商選擇使用最安全的MAC方式:
                      加密機制及MAC機制由雙方協商選定
                      基於DH實現密鑰交換,基於RSA或DSA實現身份認證
                      客戶端通過檢查服務器端的主機密鑰來判斷是否能夠繼續通信
     
     OpenSSH: 是一組用於安全地訪問遠程計算機的連接工具,它會利用一個密鑰指紋系統來驗證服務器的真實性,在第一次連接時, 用戶會被要求確認連接主機信息,之後連接會驗證預先保存下來的密鑰指紋,指紋保存在 ~/.ssh/known_hosts 中, openssl是c/s架構,服務端爲sshd監聽在22號端口上,客戶端用隨機端口進行連接。

     openssh的客戶端組件:
                          ssh: 配置/etc/ssh/ssh_config,如ssh登錄不指定用戶,默認爲本機已登錄用戶進行連接
                                 ssh [username@]host [COMMAND]例如:ssh [email protected]
                                 ssh -l username host [COMMAND]例如:ssh -l xj 192.168.146.137 'ls /opt'
                                 -p:指定端口:例如:ssh -p 5122 -l xj192.168.146.137

                           scp:利用ssh協議在主機之間實現安全文件傳輸的工具
                                    源文件在本機,目標爲遠程  
                                           scp /etc/fstab 192.168.146.137:/tmp
                                    源文件在遠程,本地爲目標
                                            scp 192.168.146.137:/etc/fstab /tmp 
                                                   -r: 複製目錄時使用
                                                   -p: 保持源文件的元數據信息
                                                   -q: 靜默模式不顯示傳輸過程
                                                   -p PORT: 指定ssh協議監聽的端口                                          

                           sftp:基於ssh的ftp服務
                                    sftp USERNAME@HOST例如:sftp  [email protected]

     openssh的服務器端:sshd
                
配置文件:/etc/ssh/sshd_config
服務腳本:/etc/rc.d/init.d/sshd
腳本配置文件:/etc/sysconfig/sshd

      sshd認證方式:
                基於口令的認證。
                基於密鑰的認證:
                      ssh-keygen -t rsa。以rsa方式生成密鑰。保存在當前用戶家目錄下的.ssh目錄下私鑰名:id_rsa、公鑰爲:id_rsa.pub,把公鑰傳送到想無需密碼登錄的服務器上。
                                  
-f /path/to/somefile: 密鑰文件保存位置和密碼名稱
                                  -P '': 在執行 ssh-keygen -t rsa時說明不用再私鑰上添加任何密碼
                                  例如:ssh-keygen -t rsa -f /root/.ssh/id_rsa1 -P ''      

                      cat /root/id_rsa.pub >> /root/.ssh/authorized_keys。把公鑰信息追加到authorized_keys文件中,之後登錄就無需密碼                                 或者使用:ssh-copy-id -i id_rsa.pub [email protected]。用一個命令完成公鑰傳送到另外一臺主機上並自動生成authorized_keys文件。-i:指定讀取公鑰,不指定用戶默認爲當前登錄用戶

     ssh最佳實踐:
                          不要使用默認的22號端口
                          不要使用protocol 1
                          限制可登錄的用戶(黑白名單選用一個即可)
                                         白名單:AllowUsers user1
                                                       AllowGroups grp1

                                          黑名單:
                                                       DenyUsers
                                                       DenyGroups
                          設定空閒會話超時時長
                                                       ClientAliveInterval 300
                                                       ClientAliveCountMax 0

                          利用防火牆設置ssh訪問策略
                          僅監聽在特定的IP地址,而非本機所有的IP地址
                          使用強密碼策略
                                                       tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs      lastb:可以查看登錄失敗用戶的信息。  
                          使用基於密鑰的認證
                          禁止使用空密碼
                          禁止root用戶直接登錄
                          限制ssh的訪問頻度
                          做好日誌,經常分析          
     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章