目的
通過配置SSL連接,您可以向公共HTTP添加額外的非對稱加密協議。SSL協議可以用於加強網站的認證系統或應用程式與伺服器之間的數據交換。在本文中,您可以學習如何配置SSL連接,並在使用Ubuntu 18.04的Apache上啟用HTTPS。
首先,通過SSH連接連接到伺服器。我們教程中有涵蓋相關內容,方便您完成連接SSH協議操作。如果是本地伺服器,請進入下一步,打開伺服器的終端。
取得SSL證書
為了建立安全的連接,Apache需要一個可以從證書頒發機構(CA)獲得的SSL證書。為了方便起見,在本例中,我們將使用自簽名或自簽名證書,僅在測試和開發環境中使用。要獲得自簽名證書,則參閱另一篇教程。
如果您有興趣獲得由認證機構頒發的免費SSL證書,請看如何使用Let’s Encrypt和Ubuntu 18.04保護Apache的內容。
請注意:在創建證書期間,輸入伺服器的IP位址和或域名時,以Common Name命令:
Common Name (e.g. server FQDN or YOUR name) []: domain.com
獲取證書後,創建「/etc/certificate」文件夾:
$ sudo mkdir /etc/certificate
然後將證書和私鑰保存在該文件夾內。
配置Apache SSL參數
為Apache將創建安全連接設置指令。在Apache conf-available目錄下創建ssl-params.conf文件:
$ sudo nano /etc/apache2/conf-available/ssl-params.conf
將以下指令複製,然後粘貼到新創建的文件中:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
保存後關閉文檔。
更換虛擬主機
完成此次操作需要用SSL連接保護的域名的虛擬主機SSL配置。在本教程中,將使用默認Apache Virtual Host的SSL配置作為示例。
打開虛擬主機SSL配置:
l$ sudo nano /etc/apache2/sites-available/default-ssl.conf
你會看到:
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
通過輸入您的電子郵件來正確設置ServerAdmin指令,並添加ServerName指令,以及您的域名或伺服器IP位址。
最後,更改SSLCertificateFile和SSLCertificateKeyFile指令指示的路徑,分別輸入證書和私鑰的路徑。
這時,您會看到:
ServerAdmin john@mydomain.com
ServerName mydomain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certificate/certificate.crt
SSLCertificateKeyFile /etc/certificate/private.key
SSLOptions +StdEnvVars
保存後關閉文件。
配置防火牆
如果您的系統上裝有防火牆,請將其設置為啟用到計算機的HTTP通信和HTTPS通信。
在使用UFW防火牆時,有一些Apache的預安裝配置文件可用。
查看UFW防火牆中安裝的可用配置文件:
$ sudo ufw app list
這時您會看到以下內容:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
為允許HTTP(埠80)和HTTPS(埠443)通信,請使用「Apache Full」配置文件。
查看配置文件信息如:
$ sudo ufw app info "Apache Full"
屏幕上會顯示:
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web server.
Ports:80,443/tcp
驗證完之後,支持其訪問:
$ sudo ufw allow in "Apache Full"
配置Apache
完成上述操作之後,就可以開始配置Apache。
啟用mod_ssl和mod_headers模塊:
$ sudo a2enmod ssl
$ sudo a2enmod headers
啟用讀取所創建的SSL配置:
$ sudo a2enconf ssl-params
啟用默認SSL虛擬主機:
$ sudo a2ensite default-ssl
檢查Apache配置文件中是否有錯誤:
$ sudo apache2ctl configtest
如果看到跳出「Syntax OK」消息,則可以重啟Apache繼續:
$ sudo systemctl restart apache2
檢查連接
通過連接到您配置的虛擬伺服器的域名或IP位址來打開瀏覽器,確保使用https協議: