為 Apache 加入 SSL in FreeBSD

www.baldur.com.tw  從2017年建好以來, 對應的 Key Word search 在 Google 中都有著不錯的排名。當時多虧了 Henry  study 了許多 SEO 相關文件, 讓我跟著來 fine tune Apache httpd . 但從今年初開始 , 這個排名越來越後面了,甚至掉到第三頁以外。確認下來,原來是因為Google從2018 年開始 , 若沒有 SSL 的網站, 就會將 SEO 的排名落到非常後面了 . 於是乎 , SSL 加入 Apache 看來是勢在必行了 .

Apache 加入 SSL 的準備工作
1. 安裝好 openssl  — 這個沒甚麼 , 安裝就是了 .
2. 憑證來源 — 使用Let’s Encrypt   &  dehydrated

Apache 啟用 SSL 的方式很簡單,  httpd.conf 把 以下 mark 移除也就是了
Include conf/extra/httpd-ssl.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

現在問題就是 , 憑證怎麼來 ? 自己用 OpenSSL 做的憑證 , 用瀏覽器去看都說是不安全.. 這可不行 . Study 下來, 除了花錢來解決這個問題, 還是有免費的憑證可以用– Let’s Encrypt .  dehydrated 可以幫忙去更新 Let’s Encrypt

安裝 dehydrated :
$ git clone https://github.com/lukas2511/dehydrated.git
$ mkdir /etc/dehydrated
維護  /etc/dehydrated/config , 我只改了以下:
WELLKNOWN=”/var/www/ba/dehydrated”  –> /var/www/ba 是網頁檔案路徑所在
OPENSSL_CNF=”/usr/local/openssl/openssl.cnf” –> 就看你把 openssl 放在那兒 .
CURL_OPTS=” -k ”  —> 這個搞死我了, CURL 若有加密, 就會有問題. 加上這個參數就可以強制

為此 , httpd-ssl.conf 針對每一個 domain (ex : worren.net 要新增如下 :

NameVirtualHost  worren.net:443
<VirtualHost worren.net:443>
ServerName worren.net:443
DocumentRoot “/var/www/worren.net”
SSLCertificateFile “/etc/dehydrated/certs/worren.net/cert.pem”
SSLCertificateKeyFile “/etc/dehydrated/certs/worren.net/privkey.pem”
SSLCertificateChainFile “/etc/dehydrated/certs/worren.net/chain.pem”
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
#記得讓這個folder 讓 httpd 是可以寫入的 . ex : chmod www:www dehydrated.
Alias /.well-known/acme-challenge /var/www/worren.net/dehydrated
CustomLog /var/log/httpd/worren.net_log combined
</VirtualHost>

再來, cp /etc/dehydrated/config  /etc/dehydrated/config_worren.net
建立 dehydrated_renew.sh  如下:

#!/bin/sh
/usr/local/dehydrated/dehydrated –config /etc/dehydrated/config_worren.net -c -d worren.net

執行這個 sh 檔 , 就能夠新建、 renew SSL 了 ! 因為這免費憑證的有效期為 3個月 . 當透過dehydrated  去 renew 時, 若Let’s Encrypt 網站發現這憑證還有 30天以上的效期 , 那就不給予更新 . 言下之意 , 這個檔案大約 2 個月跑一次就好 . Crontab 應該沒辦法設定 2 個月 , 得在 sh 檔裡做判斷 , 也沒那麼麻煩 , 我就設定每個月跑一次就是了 .

update 2021/11/4
若要再新增一個 virtual host 時 , 設定好 httpd-ssl.conf 裡的 vhost 時 , 會有個問題, 就是 SSLCertificateFile /SSLCertificateKeyFile /SSLCertificateChainFile  這三個指定的檔 , 這樣子 apache就無法啟動, 那麼dehydrated 也無法 renew / create .  這時候該怎半呢 ? 就是直接將這三個 key file 指定到自製的如下(假設自行產生的 key file 都放在 /usr/local/apache2/ssl/) :

SSLCertificateFile “/usr/local/apache2/ssl/server.crt”
SSLCertificateKeyFile “/usr/local/apache2/ssl/server.key/”
SSLCertificateChainFile “/usr/local/apache2/ssl/ca.crt”

這樣子 , Apache 就能順利啟動, 只是新增的 VHost 無法被信任 . 這時候再來執行 dehydrated  renew . 再將上述3 個  key file 指到 Let’s Encrypt  提供的 key 即可 !

Share your vote!


Do you like this post?
  • Fascinated
  • Happy
  • Sad
  • Angry
  • Bored
  • Afraid

Leave a Reply

Your email address will not be published. Required fields are marked *


Please help to input verification code