如何通過Openssl實現私有CA,併爲HTTP服務提供TLS/SLL安全機制

Openssl是SSL的開源實現(可以免費下載應用程序),是一種安全機密程序,主要用於提高遠程登錄訪問的安全性。也是目前加密算法所使用的工具之一,功能很強大。
       Openssl爲網絡通信提供安全及數據完整性的一種安全協議,包括了主要的密碼算法、常用的密鑰和證書封裝管理功能(CA)以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用,例如我們將會使用Openssl實現私有CA,並實現證書頒發。

  1. OpenSSL:SSL的開源實現  
  2.      libcrypto:通用加密庫,提供了各種加密函數  
  3.      libssl:TLS/SSL協議的實現,基於會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫  
  4.      openssl:多用途的命令行工具;能夠實現私有證書頒發機構;即在公司內部實現身份的驗證; 

      SSL:(Secure Socket Layer)安全套接字層,通過一種機制在互聯網上提供密鑰傳輸。其主要目標是保證兩個應用間通信數據的保密性和可靠性,可在服務器端和用戶端同時支持的一種加密算法。目前主流版本SSLV2、SSLV3(常用)。

下面通過此圖來了解如何實現SSL功能,在介紹之前,我們來說說SSL提供哪些功能:

  1. 1、數據的機密性:通過對稱加密算法實現數據的機密性。  
  2. 2、數據的完整性:通過單向加密算法保證數據的完整性。  
  3. 3、身份的安全驗證:提供數據發送者的身份。   

 
解說SSL會話過程:

  1. 注:前提服務器端在本地通過非對稱加密算法生成一對密鑰,並將公鑰信息發送給CA證書頒發機構,CA給服務器端頒發數字證書,並將證書發送至服務器端。    
  2. SSL會話建立過程:    
  3. 第一步:客戶端向服務器端建立連接請求(TCP/IP)    
  4. 第二步:當TCP/IP建立完成後,客戶端和服務器之間協商使用哪種加密算法,如(TSLv1/SSLv2/SSLv3)。    
  5. 第三步:協商完成後,服務器將公鑰發送給客戶端,客戶端接收公鑰信息。    
  6. 第四步:客戶端到CA證書頒發機構下載CA公鑰信息,並對服務器端發送的證書做驗證。    
  7. 第五步:隨後,客戶端在本地通過對稱加密算法生成密鑰,然後用服務器端發送的公鑰進行對這段密鑰進行加密,發送至服務器端,其保證了數據的機密性。    
  8. 第六步:服務器用自己的私鑰對這段數據進行解密,得到密鑰,然後將客戶端的請求數據進行加密發送給客戶端。   
  9. 第七步:客戶端接到響應,並用密鑰進行機密,得到數據。    
  10. 第八步:通信結束後,斷開會話通道(TCP/IP)  

那如何通過Openssl構建私有CA呢,在配置之前我們來介紹下關於Openssl的基本使用:

  1. OpenSSL:SSL的開源實現  
  2.      libcrypto:通用加密庫,提供了各種加密函數  
  3.      libssl:TLS/SSL協議的實現,基於會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫  
  4.      openssl:多用途的命令行工具;能夠實現私有證書頒發機構;即在公司內部實現身份的驗證;  
  5. openssl:  
  6.      genrsa:通過RSA算法,生成密鑰(私鑰和公鑰)  
  7.      req:申請和生成證書  
  8.      -new:生成新的證書  
  9.      -x509:互聯網常用的一種標準  
  10.      -in:證書的位置(簽署證書及證書請求常常用到)  
  11.      -out:證書的存放位置  
  12.      -days:證書的有效期限 

構建基於Openssl創建私有CA,並完成SSL/TLS機密機制:
配置環境:三臺虛擬機
172.16.88.1/16)CA證書頒發機構並提供HTTP功能--Linux
測試端(192.168.0.203/24)--Windows xp

Seq1:在CA證書頒發機構,使用Openssl生成一對密鑰(私鑰和公鑰)

  1. # cd /etc/pki/CA  
  2. # (umask 077; openssl genrsa -out private/cakey.pem 2048)    ##創建私鑰,並將權限改爲600  

Seq2: 編輯Openssl主配置文件:
# vim /etc/pki/tls/openssl.conf

Seq3:下面就開始爲CA自身,簽署證書:

  1. # openssl req -new -x509 -key -in private/cakey.pem -out cacert.pem -days 365      ##生成自簽證書 

Seq4:爲CA準備目錄及文件

  1. # cd /etc/pki/CA  
  2. # mkdir certs  crl  newcerts    ##相關證書存放目錄  
  3. # touch index.txt         ##相關證書信息  
  4. # echo "01" > serial     ##頒發證書的序列 

Seq5:配置安裝HTTP服務及安裝mod_ssl模塊提供TLS/SSL功能

  1. # yum install httpd mod_ssl -y  
  2. # vim /etc/httpd/httpd.conf #最後一行添加如下內容,並註釋DocumentRoot "/var/www/html"行,大約在281行
  3. <VirtualHost 172.16.88.1:80>
  4. DocumentRoot "/www/example.com"
  5. ServerName www.example.com
  6. </VirtualHost>
  7.  
  8. # service httpd restart  && chkconfig  httpd on 
  9. # echo "<h1>Test Hettp Server</h1>" > /var/www/html/index.html #測試頁

Seq6:進行簡單的測試:

nniiijj:
ok!!HTTP服務正常工作。

Seq7:爲HTTP服務器端配置密鑰並向CA發送證書頒發請求

  1. # mkdir /etc/httpd/ssl  
  2. # cd /etc/httpd/ssl  
  3. #(umask 077; openssl genrsa -out httpd.key 1024)  
  4. # openssl req -new -key -in httpd.key -out httpd.csr -days 3650 



Seq8:CA爲HTTP服務頒發數字證書:

  1. # cd /etc/httpd/ssl  # openssl ca -in httpd.csr -out httpd.crt -days 3650   

 



Seq9:查看CA的頒發的證書信息:

Seq10:配置SSL的主配置文件(/etc/httpd/conf.d/ssl.conf)

  1. # vim /etc/httpd/conf.d/ssl.conf  
  2. 在81行後面添加如下內容:  
  3. <VirtualHost 172.16.88.1:443>  
  4. DocumentRoot "/www/example.com" 
  5. ServerName www.example.com  
  6. 然後在114和121行更改下內容:  
  7. 114 SSLCertificateFile /etc/httpd/ssl/httpd.crt  
  8. 121 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key 

Seq11:啓動httpd服務,並查看相應的443端口是否屬於正常打開狀態
# service httpd restart  ##重新讀取配置文件

Seq12:將CA的公鑰信息下載到windows 客戶端並重命名爲cacert.crt,並安裝此證書然後測試。

 然後使用https://www.example.com是否可以正常訪問:

 

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