http://guodayong.blog.51cto.com/263451/1181059 html
Openssl是SSL的開源實現(能夠免費下載應用程序),是一種安全機密程序,主要用於提升遠程登陸訪問的安全性。也是目前加密算法所使用的工具之一,功能很強大。
Openssl爲網絡通訊提供安全及數據完整性的一種安全協議,包括了主要的密碼算法、經常使用的密鑰和證書封裝管理功能(CA)以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用,例如咱們將會使用Openssl實現私有CA,並實現證書頒發。算法
OpenSSL:SSL的開源實現 libcrypto:通用加密庫,提供了各類加密函數 libssl:TLS/SSL協議的實現,基於會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫 openssl:多用途的命令行工具;可以實現私有證書頒發機構;即在公司內部實現身份的驗證;
SSL:(Secure Socket Layer)安全套接字層,經過一種機制在互聯網上提供密鑰傳輸。其主要目標是保證兩個應用間通訊數據的保密性和可靠性,可在服務器端和用戶端同時支持的一種加密算法。目前主流版本SSLV二、SSLV3(經常使用)。
下面經過此圖來了解如何實現SSL功能,在介紹以前,咱們來講說SSL提供哪些功能:vim
一、數據的機密性:經過對稱加密算法實現數據的機密性。 二、數據的完整性:經過單向加密算法保證數據的完整性。 三、身份的安全驗證:提供數據發送者的身份。
注:前提服務器端在本地經過非對稱加密算法生成一對密鑰,並將公鑰信息發送給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自身,簽署證書:ide
# 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
# cd /etc/httpd/ssl # openssl ca -in httpd.csr -out httpd.crt -days 3650
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