Apache服務器配置SSL訪問實戰
在如今網絡安全越來越被大眾所重視,筆者雖然了解過https加密協議,但卻還沒有在自己服務器上部署過,趁著假期,在自己的機器上實踐了一番,效果點擊:Gitos Home
HTTPS 背景
什么是HTTPS?
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL, 它是一個URI scheme(抽象標識符體系),句法類同http:體系,用于安全的HTTP數據傳輸。
https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司(Netscape)進行,并內置于其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法。現在它被廣泛用于萬維網上安全敏感的通訊,例如交易支付方面。
HTTPS和HTTP的區別
超文本傳輸協議HTTP協議被用于在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
HTTPS和HTTP的區別主要為以下四點:
- https協議需要到ca申請證書,一般免費證書很少,需要交費。
- http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
- http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
- http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
實踐
今天實踐的系統環境是Centos6.6 X64, web服務器為Apache
如果您的服務器是 Nginx 或者其他服務器,筆者暫時也沒嘗試過,但原理都差不多,只是具體到配置時需要分別處理
獲取SSL證書
想要部署https加密訪問,首要要做的就是獲取SSL證書。如果是學習的話,獲取免費的就可以了,這里推薦 沃通免費證書 。
如果是正規商業用途,還是用專業級別的證書吧, 沃通 就有專業級別的證書 ,另外筆者還買過國外便宜的證書: Namecheap
服務器端SSL證書請求文件(CSR)生成
檢查服務器是否支持ssl模塊
檢查是否有mod_ssl.so文件,如無請重新編譯Apache讓其支持ssl
生成私鑰 Generate the private key
請在服務器端使用以下命令來生成私鑰
openssl genrsa -des3 -out www.mydomain.com.key 2048
此命令會要求輸入證書密碼,請輸入一個能記住的密碼;命令中 www.mydomain.com 為您的域名即可;2048為私鑰長度,這里是沃通要求,其他請按照情況選擇1024或2048
生成CSR文件 Generate the CSR
請在服務器端使用以下命令來生成CSR
openssl req -new -key www.mydomain.com.key -out www.mydomain.com.csr
此處需要填寫很多信息
Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:shanghai Locality Name (eg, city) [Default City]:shanghai Organization Name (eg, company) [Default Company Ltd]:gitos Organizational Unit Name (eg, section) []:bqteam-gitos Common Name (eg, your name or your server's hostname) []:www.gitos.cn Email Address []:a@gitos.cn
注意上面倒數第二行 Common Name ,此處一定要填寫您開啟https訪問的域名,不能隨便填寫
您也可以直接使用一個命令同時生成私鑰和CSR文件:
openssl req -new -nodes -keyout www.mydomain.com.key -out www.mydomain.com.csr
用SSL證書請求文件(CSR)獲取證書
將www.mydomain.com.csr內的內容粘貼到證書發放的網站,獲取到您的證書,下載后傳到您的服務器,下面配置將用到它
配置Apache服務器
<VirtualHost *:443> DocumentRoot "/path" //設置網頁存放目錄 ServerName www.gitos.cn:443 //服務器的端口 DirectoryIndex index.html index.html.var //首頁名稱 SSLEngine on SSLCertificateFile /path/www.mydomain.com.crt //證書 SSLCertificateKeyFile /path/tls/www.mydomain.com.key //私鑰 SSLCACertificateFile /path/1_root_bundle.crt <Directory "/path"> AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
配置完成后,重啟Apache,訪問https://www.gitos.cn,發現配置已經成功。
完善Apache服務器配置
到此,訪問https://www.gitos.cn已經沒有任何問題,但是如果用戶通過80端口訪問,也就是通過http協議訪問網站時,會出現一個大大地錯誤或者出現Apache默認頁面,非常的不友好,畢竟瀏覽器默認訪問端口為80端口
為了解決它,那么就要使用一些技巧啦。最常用的呢就是用端口重定向使所有80端口的訪問轉到443端口即可,有很多方法可以解決,比如nginx自帶重定向功能,但是這里用的Apache,那么就給一個Apache的解決方案吧
使用Rewrite模塊進行重定向,將下列語句添加在配置文件中或者程序的.htaccess中,如果沒有安裝這個模塊請重新編譯安裝
RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} !^/tz.php RewriteRule (.*) https://%{SERVER_NAME}$1 [R]
至此結束啦,有問題歡迎指正