Apache服務器配置SSL訪問實戰

jopen 9年前發布 | 13K 次閱讀 Apache Web服務器

 

在如今網絡安全越來越被大眾所重視,筆者雖然了解過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的區別主要為以下四點:

  1. https協議需要到ca申請證書,一般免費證書很少,需要交費。
  2. http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
  3. http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
  4. 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]

至此結束啦,有問題歡迎指正

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!