解決 Apache 2 Ubuntu 14.04 安裝 SSL 問題 [SOLVED] The apache plugin is not working; there may be problems with your existing configuration

今天在幫公司的 Google Cloud Platform 上面的 VM 安裝 Let’s Encrypt SSL 憑證來
讓網路服務有 HTTPS 加密的連線時發生一個問題。

過去要讓網站加密使用 https 連線,通常要讓第三方機構做認證發 SSL 憑證,並收取新台幣一千到幾十萬不等的費用(視機構而定)。通常會提供附加服務,比如說安全掃瞄網站、漏洞之類的來讓你心甘情願地付保護費錢。

有一部分的有志之士認為網站加密是每個網站應有的權力,不應該被機構綁架。所以募資拉贊助成立了 自由、免費、自動化的網站認證加密服務,並發放免費 SSL 憑證,它的名字是 :

Let’s Encrypt

參考連結:https://letsencrypt.org

一般網站管理員只要利用 Let’s Encrypt 官方提供的開源工具 certbot,按造下方連結選擇你使用的 HTTP Server 跟 OS Distribution 立即有對應文件教你安裝。

參考連結:https://certbot.eff.org

這裡以 Ubuntu 14.04 跟 Apache 2 (2.4.7) 為例

如果不知道自己的作業系統是什麼版本,可以使用以下指令:

$ cat /etc/*-release

查詢自己是使用什麼 HTTP Server 只要先去 /etc 底下查看看目前已經安裝好什麼,
比如說: /etc/nginx、/etc/apache2、/etc/httpd 資料夾存在。再來查詢目前佔用 80 port 是哪支程式、八九不離十就是你正在使用的 HTTP Server。

[Ubuntu] 底下查詢 80 port 被哪支程式佔用:

$ sudo netstat -nlp | grep ":80"
80 port apache2
Output text of the command :
netstat -nlp | grep “:80″

一般而言造著 certbot 的教學一步一步

  1. 下載 cert-auto
  2. 執行 cert-auto 並安裝好 Python 環境。
  3. 按照螢幕上的文字輸入對應的網址就可以了。
  4. 它會自動幫你找尋對應的 HTTP Server 並把遠端下載憑證
    將設定寫入到 config 檔案裡面。
  5. 然後重新啟動 HTTP Server 就會啟用 https 。
    $ sudo service apache2 restart

    [請先確定 apach2 有啟用 SSL 模組]

    $ sudo apache2ctl -M | grep "ssl"
  6. 正常來講就應該完成設定了!

但是如果這時候出現以下問題:

Apache2 Config Parsed Error
Apache2 Config Parsed Error by Cert-Auto.
錯誤訊息:
The apache plugin is not working; there may be problems with your existing configuration. The error was: PluginError(('There has been an error in parsing the file (%s): %s', u'/etc/apache2/mods-enabled/fcgid.conf', u'Syntax error'),)

這目前是 certbot 的專案 Issue 還沒解決。但是我們的問題還是要解決!

我們就必須手動設定安裝憑證到 Apache2 上,

解決辦法:

  1. 下載遠端憑證。憑證位置會放在 /etc/letsencrypt 底下
    $ certbot-auto certonly
  2. 輸入域名 並 選擇 standalone (只有憑證)
  3. 手動設定 Apache2 Config 檔案載入憑證。
    參考:https://www.digicert.com/ssl-certificate-installation-ubuntu-server-with-apache2.htm

    比如說我的設定檔就在:
    apache2/sites-available/my.conf
    可以用以下指令找:

    $ grep -iRl "VirtualHost" /etc

上面 DigiCert 這篇我覺得寫得蠻不錯的,找到 Apache2 的設定檔並增加:

<VirtualHost *:443>
    DocumentRoot /var/www/xxx
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/xxx.xxx.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/xxx.xxx.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/xxx.xxx.com/chain.pem
</VirtualHost>

如果你要保留 http,注意不要刪除掉 <VirtualHost *:80> 即可。寫完可以測試設定有沒有問題。用以下指令:

$ sudo apache2ctl configtest

如果發生以下問題:

cannot-find-pem
cannot-find-pem

就檢查一下檔案在不在,如果存在就只是權限的問題。就不用管它。

最後一樣如果檢查過了 syntax OK. 就重新啟動 Apache2 即可完成設定。

以上。

感謝大家。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *