最近上雲,將個人網站漫島的代碼從阿里雲的虛擬主機遷移到阿里雲的ECS服務器,中間給網站配置ssl證書的時候遇到一些麻煩,參照網上的方法均不起任何作用,可能我這個問題比較個性,自己花了兩天時間才解決,首先看下常規的SSL證書配置方案:
1.在Apache的安裝目錄下創建cert目錄,並且將下載的全部文件拷貝到cert目錄中。如果申請證書時是自己創建的CSR文件,請將對應的私鑰文件放到cert目錄下並且命名爲a.key;
2.打開 apache 安裝目錄下 conf 目錄中的 httpd.conf 文件,找到以下內容並去掉“#”。
#LoadModule ssl_module modules/mod_ssl.so (如果找不到請確認是否編譯過 openssl 插件)
#Include conf/extra/httpd-ssl.conf(刪除行首的配置語句註釋符號“#”,保存後退出)
3.打開 apache 安裝目錄下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,與操作系統及安裝方式有關), 在配置文件中查找以下配置語句:
# 添加 SSL 協議支持協議,去掉不安全的協議
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 證書公鑰配置
SSLCertificateFile cert/a_public.crt
# 證書私鑰配置
SSLCertificateKeyFile cert/a.key
# 證書鏈配置,如果該屬性開頭有 '#'字符,請刪除掉
SSLCertificateChainFile cert/a_chain.crt
4.重啓 Apache
以上是常規解決方案,網上大部分指導操作都是這樣的,這並不沒有解決我的問題,當我按照這樣配置後,apache無法啓動,錯誤日誌顯示Parent process exited abruptly. Child process is ending(父進程突然退出,子進程正在結束!)
以上錯誤的原因無非是配置文件出錯,用代碼註釋法很容易排查出問題出在第二步#Include conf/extra/httpd-ssl.conf(刪除行首的配置語句註釋符號“#”,保存後退出)
,然而問題雖然很明確,但是改了很久也沒能解決,最後拋棄了這種方案,下面是我的解決方案。
- 1.打開 Apache 安裝目錄下 conf 目錄中的 httpd.conf 文件,找到以下內容並去掉前面的“#”註釋符,使得SSL模塊生效。
- 2.不解開
#Include conf/extra/httpd-ssl.conf
的註釋,引用我們手動寫的一個簡單配置文件。即增加一條引用:【Include conf/vhostssl.conf】,如下圖所示:
vhostssl.conf
內容如下,自己替換相應內容:
Listen xml
<VirtualHost *:443>
DocumentRoot "C:\projects\PhpStudy20180211\PHPTutorial\WWW"
ServerName www.iscoser.com
ServerAlias iscoser.com
SSLEngine on
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "C:\projects\PhpStudy20180211\PHPTutorial\Apache\cert\xx.com_public.crt"(證書公鑰)
SSLCertificateKeyFile "C:\projects\PhpStudy20180211\PHPTutorial\Apache\cert\xx.com.key"(證書私鑰)
SSLCertificateChainFile "C:\projects\PhpStudy20180211\PHPTutorial\Apache\cert\xx_chain.crt"(證書鏈)
<Directory "C:\projects\PhpStudy20180211\PHPTutorial\WWW">
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
3.重啓apache(注意443端口是否被防火牆攔截或被佔用);
經歷以上步驟,我終於解決了ssl證書的配置問題,網上大部分的博客也好或者是其他的文章也好,套路都差不多,所以我在這裏提供一個額外的思路供大家參考,另外說一句,我用的是lamp的集成環境。