1. 獲取SSL證書

根據自己的網站伺服器來獲取不同的ssl證書,我的伺服器是ubuntu20.04。

證書如下:

00_***.key       ## 私鑰檔案
01_CERTIFICATE_***_***.crt    ## 證書檔案
02_INTERMEDIATE_***.crt  證書鏈檔案

將證書上傳到你的伺服器上,我是在/etc/ssl/目錄下新建了一個資料夾。 

2. 配置證書

首先,進入/etc/apache2/sites-available目錄,如下:

原先只有000-default.conf和default-ssl.conf兩個檔案,“.old”結尾的檔案用於備用原有配置檔案。

做好備份後,我們需要設定一個軟連結,把這個檔案連結到sites-enabled這個資料夾中,可以使用絕對路徑,也可以使用相對路徑。我使用的是絕對路徑,命令如下:

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

然後去修改這個檔案default-ssl.conf,因為已經做了軟連結,所以這時候修改這兩個資料夾下的default-ssl.conf都一樣。

初始檔案內容如下(去除註釋):

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
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 <FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory> </VirtualHost>
</IfModule>

修改後內容如下(修改的內容後有註釋):

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin ***@***.** ## 你的郵箱,不修改也可以 DocumentRoot /var/www/html/policy ## 你的應用目錄 ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on      ## 下面三行配置證書檔案
SSLCertificateFile /etc/ssl/***/01_CERTIFICATE_***_***.crt ## 證書檔案,/etc/ssl/***是步驟1中的自定義資料夾
SSLCertificateKeyFile /etc/ssl/***/00_***.key ## 私鑰檔案
     SSLCertificateChainFile /etc/ssl/***/02_INTERMEDIATE_***.crt   ## 證書鏈檔案, 該行在原始檔案中是被註釋的

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory> </VirtualHost>
</IfModule>

重要的4個引數,作用如下: 

SSLEngine on	## 啟用 SSL 功能
SSLCertificateFile ## 證書檔案
SSLCertificateKeyFile ## 私鑰檔案
SSLCertificateChainFile   ## 證書鏈檔案

改好之後,Esc,:wq 儲存。

然後載入一下 Apache2 的 SSL 模組:

sudo a2enmod ssl   #載入模組
sudo systemctl restart apache2 # 重啟服務

這時,在瀏覽器輸入https://你的域名,應該已經可以通過 https 的方式來訪問網站了,這時瀏覽器那裡應該也已經有了一個綠色的小鎖。

但是如果不主動輸入https://的話,直接輸入域名,還是會直接跳轉到 80 埠的普通的 http 方式訪問,所以我們需要強制使用 https 來訪問。

3. 強制 https 訪問

開啟/etc/apache2/sites-available/000-default.conf檔案,在VirtualHost標籤內新增如下三行:

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]

然後儲存,然後啟動 Apache2 的重定向:

sudo a2enmod rewrite

然後再重啟 Apache2,至此大功告成:

sudo systemctl restart apache2 

重新整理一下網頁,輸入域名,就會直接跳轉HTTPS訪問。