基于阿裡雲的幫助文檔,但是文檔很多地方太陳舊了。
Operating System: CentOs Linux 8
Webserver: Apache 2.4.37
1.解壓已下載下傳儲存到本地的Apache證書檔案
解壓後的檔案夾中有3個檔案:
- 證書檔案:以.crt為字尾或檔案類型。
- 證書鍊檔案:以.crt為字尾或檔案類型。
- 密鑰檔案:以.key為字尾或檔案類型
在Apache的目錄下建立一個檔案夾,名稱随意(建議
cert
)。然後将這三個檔案放到這個檔案夾裡面。
Linux Apache安裝目錄
1、RPM包安裝方式
● 采用RPM包安裝,安裝路徑應在 /etc/httpd目錄下
apache配置檔案:/etc/httpd/conf/httpd.conf 可以修改相關的通路路徑及配置
Apache子產品路徑:/usr/sbin/apachectl 啟動子產品
web目錄:/var/www/html 項目的存儲路徑
2、源碼編譯安裝方式
● 采用源代碼安裝,一般預設安裝在/usr/local/apache2目錄下。
2.檢查Apache伺服器中是否已經安裝mod_ssl.so子產品。
如未安裝,可執行
yum install -y mod_ssl
指令安裝mod_ssl.so子產品。安裝後,可執行
httpd -M|grep "ssl"
指令檢查mod_ssl.so是否安裝成功。安裝完成後 /etc/httpd/conf.d 目錄下會出現一個ssl.conf檔案
在這個檔案裡面找到如下内容進行更改,将後面的檔案路徑替換為你自己的證書檔案(之前放在Apache/cert路徑下的三個證書檔案)路徑,檔案路徑是絕對路徑。
SSLCertificateFile xxx_public.crt
SSLCertificateKeyFile xxx.key
SSLCertificateChainFile xxx_chain.crt
然後繼續在此檔案中配置找到以下内容配置443站點資訊(這裡隻說明内容,按照内容直接改就可以)
DocumentRoot "/var/www/html" #(引号裡面是你的項目的路徑,預設是/var/www/html)
ServerName xxxxx (這裡的xxxxx是你的域名)
<Directory "/var/www/html"> #(引号裡面是你的項目的路徑,預設是/var/www/html)
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
有的教程會再去在Apache安裝目錄下,打開Apache/conf/httpd.conf,在httpd.conf檔案中找到以下參數并進行配置。
#LoadModule ssl_module modules/mod_ssl.so #删除行首的配置語句注釋符号“#”加載mod_ssl.so子產品啟用SSL服務,Apache預設是不啟用該子產品的。如果找不到該配置,請重新編譯mod_ssl子產品。
#Include conf/extra/httpd-ssl.conf #删除行首的配置語句注釋符号“#”。
但是我嘗試之後發現會導緻報錯,不進行這一步反而一切正常。
Starting The Apache HTTP Server…
Jan 13 15:35:21 打碼我的伺服器位址 httpd[22343]: AH00526: Syntax error on line 5 of /etc/httpd/conf.d/ssl.conf:
Jan 13 15:35:21 打碼我的伺服器位址 httpd[22343]: Cannot define multiple Listeners on the same IP:port
Jan 13 15:35:21 打碼我的伺服器位址 systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Jan 13 15:35:21 打碼我的伺服器位址 systemd[1]: httpd.service: Failed with result ‘exit-code’.
Jan 13 15:35:21 打碼我的伺服器位址 systemd[1]: Failed to start The Apache HTTP Server.
3.修改httpd-ssl.conf(但我壓根沒找到)配置檔案。
原教程說是在Apache/conf/extra/目錄下,打開httpd-ssl.conf檔案。根據作業系統的不同,http-ssl.conf檔案也可能存放在conf.d/ssl.conf/目錄下。
但在我這個伺服器上其實還是ssl.conf檔案。
在檔案中找到以下參數,按照下文中注釋内容進行配置。
<VirtualHost *:443>
ServerName #修改為申請證書時綁定的域名。
DocumentRoot /data/www/hbappserver/public
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL協定支援協定,去掉不安全的協定。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。
SSLHonorCipherOrder on
SSLCertificateFile cert/domain_name1_public.crt # 将domain_name1_public.crt替換成您證書檔案名。
SSLCertificateKeyFile cert/domain_name1.key # 将domain_name1.key替換成您證書的密鑰檔案名。
SSLCertificateChainFile cert/domain_name1_chain.crt # 将domain_name1_chain.crt替換成您證書的密鑰檔案名;證書鍊開頭如果有#字元,請删除。
</VirtualHost>
你可能會注意到最後三行的内容我們第一步其實就做過了。
4.重新開機Apache伺服器使SSL配置生效。
重新開機
service httpd restart
開啟
service httpd start
檢視狀态(報錯)
service httpd status
其實每次改完它自己就重新開機了,更多情況是打錯字了導緻Apache罷工了,不得不來回檢視報錯……
5.可選:修改httpd.conf檔案,設定HTTP請求自動跳轉HTTPS。
在httpd.conf檔案中的
<VirtualHost *:80> </VirtualHost>
中間,添加以下重定向代碼。
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
我沒成功。。。等之後填坑