安全連接方式SSL
通常的連接方式中
通信是以非加密的形式在網絡上傳播的
這就有可能被非法竊聽到
尤其是用於認證的口令信息
為了避免這個安全漏洞
就必須對傳輸過程進行加密
對HTTP傳輸進行加密的協議為HTTPS
它是通過SSL(Secure socket layer)進行HTTP傳輸的協議
不但通過公用密鑰的算法進行加密保證傳輸的安全性
而且還可以通過獲得認證證書CA
保證客戶連接的服務器沒有被假冒
使用公用密鑰的方式可以保證數據傳輸沒有問題
但如果浏覽器客戶訪問的站點被假冒
這也是一個嚴重的安全問題
這個問題不屬於加密本身
而是要保證密鑰本身的正確性問題
要保證所獲得的其他站點公用密鑰為其正確的密鑰
而非假冒站點的密鑰
就必須通過一個認證機制
能對站點的密鑰進行認證
當然即使沒有經過認證
仍然可以保證信息傳輸安全
只是客戶不能確信訪問的服務器沒有被假冒
如果不是為了提供電子商務等方面對安全性要求很高的服務
一般不需要如此嚴格的考慮
下面我們就分幾節來談到如何在Apache服務器上實現SSL
第一節SSL
SSL除了可以用在Web服務器與浏覽器之間信息交換以外
還可以支持其他我們所熟識的網絡應用
以TCP/IP網絡層來看
SSL是定位在網絡層之上的應用協議
如圖
HTTPFTPSMTP
Secure Socket Layer
TCP層
IP層
任何以TCP/IP層以上的網絡協議SSL都可以支持
因此HTTP
FTP
SMTP等等皆是SSL的保護范圍
SSL協議一共包含兩個部分
SSL Handshake協議和SSL Record協議
前者是負責通信前的一些參數協商
後者則是定義SSL的內部數據格式
SSL Handshake協議
SSL中Handshake協議可以說是SSL的前置步驟
就好象初次見面的兩個人回先自我介紹一番再開始談話一樣
通信的餓雙方(商店的服務器與客戶計算機)先進行
溝通
與
協調
有關SSL通信的參數設置
其中包括
※通信中所使用的SSL版本
※信息加密用的算法 ※客戶端的身份驗證要求 ※所使用的公開金鑰算法
這個協議的餓大致步驟如下
(
)Client Hello:首先
由客戶端計算機向服務器Say Hello
並同時將客戶端計算機所能支持的安全模塊告訴對方
以便溝通
信息內容包括
SSL協議版本
本次聯機的餓識別碼以及加密模塊等
(
)Server Hello
這時商店端服務器在收到這個信息後
立即送出包含以下信息的響應信息給客戶端
※服務器的數字證書
讓客戶端可以檢查服務器的身份
※如果服務器要求雙方相互認證的話
則送出
認證請求
的餓信息
要求客戶端也提出識別身份的數字證書
※服務器用來加密的金鑰
(
)加解密參數
當客戶端收到服務器的信息後
就可根據要求來響應
並且也將客戶端的公用金鑰也送給對方
作為後續信息的加解密之用
到這個階段為止
通信雙方都已經達成了共識
並准備傳送真正的信息內容
(
)HTTP數據流
協調的工作已經大功告成了!這時雙方就可以HTTP協議來進行數據交換了
SSL Record協議
顧名思義Record協議
是在描述SSL信息交換的過程中的記錄格式
SSL協議是介於應用層和網絡層之間
因此它回接收來自應用層的信息
並加以包裝後交由下一層(也就是網絡層來傳送)
第二節Apache上實現SSL
雖然Apache服務器不支持SSL
但Apache服務器有兩個可以自由使用的支持SSL的相關計劃
一個為Apache
SSL
它集成了Apache服務器和SSL
另一個為Apache+mod_ssl
它是通過可動態加載的模塊mod_ssl來支持SSL
其中後一個是由前一個分化出的
並由於使用模塊
易用性很好
因此使用范圍更為廣泛
還有一些基於Apache並集成了SSL能力的商業Web服務器
然而使用這些商業Web服務器主要是北美
這是因為在那裡SSL使用的公開密鑰的算法具備專利權
不能用於商業目的
其他的國家不必考慮這個專利問題
而可以自由使用SSL
以下是我們安裝說需要的各部分說明
apache_
tar
gz (服務器)
mod_ssl
tar
gz (SSL接口模塊)
openssl
tar
gz (ssl安全和算法類庫)
mod_perl
tar
gz (perl接口模塊)
rsaref
tar
Z(RSA算法包)
perl
_
tar
gz(perl環境)
如果你的系統是從頭裝起的話
建議你留出一個叫/chroot的分區用來運行Apache
至於這個分區的大小
取決於你自已
一般來說
一個普通的網站有
M也就夠了
但你的系統如果早就運行了Apache
你可以另外開辟一個分區
或者選擇不用獨立分區來安裝
僅僅在根下面開一個目錄
另外我假定你的系統已經通過了一定的安全檢測——在安裝Apache之前(如果有其它漏洞存在的話
你認為運行在其上的Apache會怎樣
所謂覆巢之下
焉有完卵:)
檢測至少要包括(但不僅限於)——移除不安全的SUID程序
升級某些守護進程
去掉不必要的服務
還假定你是的WEB SERVER是運行TCP/IP而且有自己的地址
一
平台
以下測試都在下列平台下通過:
Slackware
x distribution using gcc
and Perl v
_
Solaris
on Sparc using gcc v
and Perl v
_
Digital UNIX V
F distribution using gcc
and Perl v
_
二
獲取所需要的軟件
因為阿帕奇並沒有在她的包裡自己SSL
因此我們必須先下載到這些加密網頁所必需的部份
Apache Web Server
不必多說
我們當然需要獲得這個web server
現在的版本是
阿帕奇是現在世界
上使用最廣泛的web server
mod_ssl
這是一個為Apache
x web server提供強力加密的的軟件模塊
它使用的是SSL v
和v
以及TLS(Transport Layer Security)v
協議
該軟件包是在BSD的license下開發的
在非商業的情況下
你可以自由地使用它
要判斷該使用哪一個版本的mod_ssl很簡單
它的版本號是
格式的
也就是說
你如果用的是
的Apache
那麼就該用
的mod_ssl
mod_perl
Apache
x 的perl接口模塊
Open SSL
這一軟件包提供了SSL v
/v
(Secure Sockets Layer)及TLS v
(Transport Layer Security) 協議的加密保護
RSAref
用搜索引擎查找一下
rsaref
tar
Z
應該就能找到了RSA加密算法的實現軟件包
Perl減壓縮
安裝(詳見Perl介紹)
Perl是一種編程語言
它是一種非常流行的編程語言
在文本處理
端口通信
協調多個不同應用以及完成其他諸多任務時都受到人們的歡迎
Perl同時也是一種頗有名氣的流行CGI編程語言
不過這只是Perl諸多應用中的一種
我們將把這些程序安裝於/usr/local目錄下
增加功能模塊可以給阿帕奇更強大的功能
如果你需要更多的模塊的話
自己去獲得它並且加載
比如mod_php這一模塊也是現在流行的
可以使阿帕奇提供php腳本支持……
三
軟件包的安裝
在實際安裝前我們要決定我們將把web server安裝在什麼環境下
對於一個對安全有相當高要求的人來說
可以將服務器和軟件安裝於chroot環境
chroot改變root 目錄並且僅在這一目錄中執行程序
這提供了一個內建的小環境
即使入侵者已經通過cgi程序或者其它辦法通過
端口獲得了系統的進入權限
它也只能夠在這一受限的環境中活動
從安全角度考量
這當然是最好的
但對系統管理員來說
這樣安裝相對麻煩一些
還必須把一些必要的庫
perl以及相關工具也搬到chroot中
所以——你自己決定吧
這裡我們介紹的是在chroot下安裝
展開這些軟件包:
#gzip
d
c apache_
tar
gz | tar xvf
#gzip
d
c mod_ssl
tar
gz | tar xvf
#gzip
d
c openssl
tar
gz | tar xvf
#gzip
d
c mod_perl
tar
gz | tar xvf
展開並且編譯rsaref
#mkdir rsaref
#cd rsaref
#gzip
d
c
/rsaref
tar
Z | tar xvf
#tar xvf rsaref
tar
#cp
rp install/unix temp
#cd temp
#make
#mv rsaref
a librsaref
a
#cd
/
/
編譯OpenSSL
#cd openssl
#perl util/perlpath
pl /usr/bin/perl (Path to Perl)
#
/config
L`pwd`/
/rsaref/temp/
#make
#make test
#cd
將mod_perl加到Apache的編譯選項裡
#cd mod_perl
#perl Makefile
PL APACHE_PREFIX=/usr/local/apache \
APACHE_SRC=
/apache_
/src \
USE_APACI=
你會得到下面的提示:
Configure mod_perl with
/apache_
/src ? [y]
直接按enter就是默認的yes
然後Makefile會問你是否建立httpd
可以用n選擇不
#make
#make install
#cd
將mod_ssl加到Apache中
#cd mod_ssl
#
/configure
with
apache=
/apache_
\
prefix=/usr/
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27365.html