一、簡介 1、認識 加密網頁(https): tcp:443 明文網頁(http): tcp:80 survey.netcraft.net --這個網站上可以查到最新的網站伺服器的使用率 超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網 ...
一、簡介 1、認識 加密網頁(https): tcp:443 明文網頁(http): tcp:80 survey.netcraft.net --這個網站上可以查到最新的網站伺服器的使用率 超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網路協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發佈和接收HTML頁面的方法 2、Apache Apache HTTP Server(簡稱Apache)是Apache軟體基金會的一個開放源碼的網頁伺服器,可以在大多數電腦操作系統中運行,由於其多平臺和安全性被廣泛使用,是最流行的Web伺服器端軟體之一,其特點如下: 1、支持最新的HTTP/1.1通信協議 2、擁有簡單而強有力的基於文件的配置過程 3、支持通用網關介面 4、支持基於IP和基於功能變數名稱的虛擬主機 5、支持多種方式的HTTP認證 6、集成Perl處理模塊 7、集成代理伺服器模塊 8、支持實時監視伺服器狀態和定製伺服器日誌 9、支持伺服器端包含指令(SSI) 10、支持安全Socket層(SSL) 11、提供用戶會話過程的跟蹤 12、支持FastCGI 13、通過第三方模塊可以支持JavaServlets 3、安裝: www.apache.org --apache 官網 # yum install httpd* --安裝httpd服務 # httpd -t --檢查配置文件正確性 # rm -rf /etc/httpd/conf.d/welcome.conf --刪除歡迎界面;因為安裝了 httpd-manual ,故可以訪問 http://ServerIp/manual 4、運行於兩種模式:prefork,worker prefork模式: prefork是Unix平臺上的預設(預設)MPM,使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接,效率高,但記憶體占用量比較大。 這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web伺服器,它的工作方式類似於Apache 1.3。它適合於沒有線程安全庫,需要避免線程相容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。 worker模式: worker使用多個子進程,每個子進程有多個線程,每個線程在某個確定的時間只能維持一個連接,記憶體占用量比較小,適合高流量的http伺服器。缺點是假如一個線程崩潰,整個進程就會連同其任何線程一起”死掉”,所以要保證一個程式在運行時必須被系統識別為”每個線程都是安全的”。 此多路處理模塊(MPM)使網路伺服器支持混合的多線程多進程。由於使用線程來處理請求,所以可以處理海量請求,而系統資源的開銷小於基於進程的MPM。但是它也使用了多進程,每個進程又有多個線程,以獲得基於進程的MPM的穩定性。 # httpd -l --查看運行模式,預設為 prefork.c # mv -v /usr/sbin/httpd{,.prefork} --備份prefork模式 # mv -v /usr/sbin/httpd{.worker,} --使用worker模式 二、配置文件詳解 1、全局環境參數 ServerTokens OS --當伺服器響應主機頭(header)信息時顯示Apache的版本和操作系統名稱 ServerRoot "/etc/httpd" --伺服器的基礎目錄,一般來說它將包含conf/和logs/子目錄,其它配置文件的相對路徑即基於此目錄。 PidFile run/httpd.pid --第一個httpd進程(所有其他進程的父進程)的進程號文件位置。 Timeout 60 --若60秒後沒有收到或送出任何數據就切斷該連接 KeepAlive Off --預設不使用保持連接的功能,即客戶一次請求連接只能響應一個文件,建議允許 MaxKeepAliveRequests 100 --在保持連接功能時,設置客戶一次請求連接能響應文件的最大上限,超過就斷開 KeepAliveTimeout 15 --在使用保持連接功能時,兩個相鄰的連接的時間間隔超過15秒,就切斷連接 ................. Listen 80 --伺服器監聽的埠號;監聽埠可以多開 Include conf.d/*.conf --將/etc/httpd/conf.d目錄下所有以conf結尾的配置文件包含進來 User apache --提供服務的子進程的用戶 Group apache --提供服務的子進程的用戶組 ServerAdmin [email protected] --管理員的郵件地址 ServerName mail.george.com:80 --主站點名稱(網站的主機名) UseCanonicalName Off DocumentRoot "/var/www/html" --設置Web文檔根目錄;但是可以使用符號鏈接和別名來指向到其他的位置;如不是絕對路徑,則被假定為是相對於ServerRoot的路徑 2、路徑控制參數 DirectoryIndex index.html index.html.var --網站預設網頁文件名,左邊優先 AccessFileName .htaccess --指定保護目錄配置文件的名稱 --------------------------------------------------------------------------------------------------------- <Directory Directory-path> --用於封裝一組指令,使之僅對某個目錄及其子目錄生效。針對文件系統上的一個目錄 Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all Deny from 192.168.133.22 </Directory> Directory-path --可以是一個目錄的完整路徑,或是包含了Unix shell匹配語法的通配符字元串。在通配符字元串中,"?"匹配任何單個的字元,"*"匹配任何字元序列。也可以使用"[]"來確定字元範圍。在"~" 字元之後也可以使用正則表達式 Options --這個指令的值可以是“None”,“All”,或者下列選項的任意組合:Indexes(前面有'-',則關閉網站列目錄的功能,無則反之);Includes;FollowSymLinks;SymLinksifOwnerMatch;ExecCGI;MultiViews AllowOverride --控制那些被放置在.htaccess文件中的指令。它可以是All,None(看不到任何.htaccess里的任何配置),或者下列指令的組合:Options;FileInfo;AuthConfig;Limit Order,Allow,Deny --控制誰可以獲得服務。oreder的參數最終以右邊的為準,順序可以逆轉 --------------------------------------------------------------------------------------------------------- <Directory "/www/images"> <Files ~ "\.jpg$"> --針對指定的文件,可以是是在某個Directory下,也可以全局的 Order deny,allow Allow from all </Files> </Directory> --------------------------------------------------------------------------------------------------------- <Location /server-status> -- 允許使用URL"http://servername/server-status"的形式查看伺服器狀態(或是信息);Location主要是控制URL SetHandler server-status(server-info) Order deny,allow Allow from all </Location> --------------------------------------------------------------------------------------------------------- Alias /url-path /filesystem-path --把URL映射到文件系統路徑;(也可以自己在系統上使用 ln -s 軟鏈接實現哦) <Directory "/filesystem-path"> </Directory> 3、目錄訪問進行用戶密碼控制(非系統用戶) <Directory "/var/www/html"> --理論也可以在Location,file Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all authname "Authenticate yourself" --瀏覽器打開該url的提示語 authtype basic authuserfile /etc/httpd/userpasswd --用戶&密碼文件位置 require valid-user </Directory> # htpasswd -c /etc/httpd/userpasswd frank --創建一個允許訪問用戶 # htpasswd /etc/httpd/userpasswd george --再創建一個,記得 '-c' 參數,是為了創建該密碼文件,只能創建第一個用戶時使用。 註意:如果一個目錄使用密碼控制訪問,那麼在通過網頁瀏覽器列出該目錄的父目錄時,看不到該目錄,也就是說,該目錄被隱藏了。但是可以通過直接輸入url來訪問(即使你有賬戶和密碼也一樣)。 4、基於功能變數名稱的虛擬主機 NameVirtualHost *:80 --添加這條配置,將80埠設置為虛擬主機埠 <VirtualHost *:80> --第一個虛擬主機 ServerName www.george.com DocumentRoot /var/www/html/ <Directory "/var/www/html"> .................. </Directory> </VirtualHost> <VirtualHost *:80> --第二個虛擬主機 ServerName mail.george.com DocumentRoot /var/www/cgi-bin/openwebmail/ ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl <Location /> ...................... </Location> </VirtualHost> 該實驗的 SeverName 參數接IP地址的話,我們也可以做基於IP的虛擬主機 5、日誌參數 ErrorLog logs/error_log --錯誤日誌的存方位置 LogLevel warn --定義錯誤日誌等級,include: debug, info, notice, warn, error, crit, alert, emerg. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined .............. LogFormat "%{User-agent}i" agent --該四條是訪問日誌的預設格式 CustomLog logs/access_log combined --使用 combined 訪問日誌格式 %h –客戶端的ip地址或主機名 %l –The 這是由客戶端 identd 判斷的RFC 1413身份,輸出中的符號 "-" 表示此處信息無效。 %u –由HTTP認證系統得到的訪問該網頁的客戶名。有認證時才有效,輸出中的符號 "-" 表示此處信息無效。 %t –伺服器完成對請求的處理時的時間。 "%r" –引號中是客戶發出的包含了許多有用信息的請求內容。 %>s –這個是伺服器返回給客戶端的狀態碼。 %b –最後這項是返回給客戶端的不包括響應頭的位元組數。 "%{Referer}i" –此項指明瞭該請求是從被哪個網頁提交過來的。 "%{User-Agent}i" –此項是客戶瀏覽器提供的瀏覽器識別信息。 6、SSL加密配置 # yum install -y mod_ssl --安裝加密模塊 # vim /etc/httpd/conf.d/ssl.conf <VirtualHost *:443> ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES SSLCertificateFile /etc/pki/tls/certs/localhost.crt --配置公鑰文件 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key --配置秘鑰文件 <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> ServerName www.george.com DocumentRoot /var/www/cgi-bin/openwebmail/ ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl <Location /> SSLOptions +StdEnvVars Options Indexes order deny,allow Allow from all </Location> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> 6.1、自己配置證書 # mkdir /etc/pki/test/ # cd /etc/pki/test # openssl genrsa -out /etc/pki/test/test.key 1024 --秘鑰 # openssl req -new -key test.key -out test.csr Country Name (2 letter code) [XX]:cn State or Province Name (full name) []:guangDong Locality Name (eg, city) [Default City]:Shenzhen Organization Name (eg, company) [Default Company Ltd]:IT Organizational Unit Name (eg, section) []:maintenance Common Name (eg, your name or your server's hostname) []:www.george.com Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 An optional company name []:Azt # openssl req -x509 -days 365 -key test.key -in test.csr -out test.crt --公鑰 # ls --然後將下列 test.crt && test.key 配置到 /etc/httpd/conf.d/ssl.conf 即可 test.crt test.csr test.key
6.2、測試自己配置的證書 https://www.george.com/mail 但是我們自己創建的證書在瀏覽器中識別是不受信任的;證書狀態也是“由於CA 根證書不在“受信任的根證書頒發機構”存儲區中,所以它不受信任。”
需要我們自己在瀏覽器中手動將我們自己創建的證書(test.crt)導入到“受信任的根證書頒發機構”&&“受信任的發佈者”。以谷歌瀏覽器為列,步驟如下:
接著,會再彈出幾個對話框,我們點擊“下一步”——“完成”——“是”。就 OK了。
此時在使用瀏覽器打開我們的網站,查看證書的狀態“該證書沒有問題”。