天天看點

Linux Apache部署SSL證書

基于阿裡雲的幫助文檔,但是文檔很多地方太陳舊了。

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]

我沒成功。。。等之後填坑

繼續閱讀