1. 程式人生 > >Apache虛擬主機綁定域名證書和ssl_module模塊

Apache虛擬主機綁定域名證書和ssl_module模塊

apache Linux

本文檔只是用於yum安裝的Apache!!!

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協議安全。

首先我們需要申請域名證書,域名證書可以到一些免費證書的申請網站申請,比如說阿裏雲的雲盾證書服務,可以在上面申請三張一年有效期的單域名免費證書
技術分享圖片

申請通過後點擊下載,把證書文件上傳到服務器上
技術分享圖片

然後,我們在Apache上使用yum安裝ssl_module模塊

yum -y install ssl_module

安裝好之後,在/etc/httpd/conf.d/目錄下多了一個ssl.conf文件,編輯這個文件

LoadModule ssl_module modules/mod_ssl.so #加載sslmodule模塊
Listen 443 #開啟443監聽端口
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

<VirtualHost :443> #配置虛擬主機
ServerName www.abc.com
#配置虛擬主機域名
DocumentRoot "/var/www/html/abc"
#配置虛擬主機站點目錄
ErrorLog logs/ssl_error_log
#配置虛擬主機錯誤日誌存放的位置
TransferLog logs/ssl_access_log
#配置虛擬主機訪問日誌存放的位置
LogLevel warn
#配置虛擬主機訪問日誌記錄的級別
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
#添加SSL協議支持協議,去掉不安全的協議
#修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
SSLCertificateFile cert/abc.pem
#證書公鑰存放位置
SSLCertificateKeyFile cert/abc.key
#證書私鑰存放位置
SSLCertificateChainFile cert/abc-chain.pem
#證書鏈存放位置*

<Files ~ ".(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>

<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

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>

配置好後重啟httpd服務

service httpd restart

如果重啟中報Starting httpd: [Sat May 05 12:18:52 2018] [warn] default VirtualHost overlap on port 443, the first has precedence的錯誤,那麽說明並沒有應用ssl文件中的虛擬主機配置文件,需要在httpd.conf主配置文件中加上下面的配置就好了。

NameVirtualHost *:443

Apache虛擬主機綁定域名證書和ssl_module模塊