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

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

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

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

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

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

 
解說SSL會話過程:

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

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

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

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

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

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

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

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

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

Seq4:爲CA準備目錄及文件

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

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

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

Seq6:進行簡單的測試:

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

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

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



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

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

 



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

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

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

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

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

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

 

本文出自 “See you next year CA” 博客,請務必保留此出處http://guodayong.blog.51cto.com/263451/1181059



此外,還有一篇文章介紹的很詳細:https://segmentfault.com/a/1190000002569859,請參考

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