↓ 快轉到主要內容
讓你的 apache支援ssl
技術文章架站

讓你的 apache支援ssl

Posted by Alvin Chen on

讓你的 apache支援ssl

·968 字·2 分鐘
作者
Alvin Chen
相信寫 Code 可以改變世界

Apache支援SSL ,完成了基礎架站之後,如果有設定SSL 讓你的Apache 可以透過Https連線的需求可直接參考以下做法

首先您必須先購買ssl憑證,購買憑證其實不難只是等級分非常多,簡單分辨的方法呢,如果你的網站沒有金流串接,那麼基本上不會有太大的問題

國內購買憑證有很多管道,只是單價不怎麼便宜,國外的便宜許多,只是礙於網站是全英文的也許很多人會卻步,個人是習慣在Godaddy直接購買SSL 或者是網址

除了網站是中文的比較親民以外,價格上也不算太貴而且設定很方便喔!

https://tw.godaddy.com/

如果順利購買完成應該就會看到像這樣子的畫面

ssl 供應商

那麼SSL 憑證購買完成後,接下來就讓我們來看看如何設定Apache 吧

步驟一 :產生CSR
#

CSR是產生伺服器的認證檔案,每一台伺服器都是唯一的,因此如果日後網站換了伺服器(無論是換到Apache 或者IIS )就必須要重新產生CSR再與憑證商重新認證下載憑證

openssl req -new -newkey rsa:2048 -nodes -keyout yourdomainname.key -out yourdomainname.csr

接下來會有一大段的提示,請依照您的網站資料填寫即可,完成後會產生兩個檔案*.key以及*.csr

這時您必須打開csr將內容提交給憑證廠商用於下載憑證檔

sudo nano your_domain.csr

內容大致上會類似這樣子,會是一段看不懂的亂碼,只要將其中的文字全數複製起來依照憑證商的指示繼續操作就可以了

ssl crt

步驟二 :打開Apache 的SSL mode,並重新啟動Apache
#

sudo a2enmod ssl
sudo service apache2 restart

步驟三 :設定Apache config
#

將我們剛剛產生的key以及從憑證商下載的crt檔 bundle檔收好,此範例會放在/var/ssl/ 這個資料架底下,接著修改Apache config檔

我們就拿上次的範例來看

#/etc/apache2/sites-available/site1.conf
Listen 8080
<VirtualHost *:8080>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile /var/ssl/your_name.crt
    SSLCertificateKeyFile /var/ssl/your_domain_name.key
    SSLCertificateChainFile /var/ssl/boundle_name.crt

    <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
    </Directory>
</VirtualHost>

加入了SSLEngine 這一塊,記得檔案路徑與名稱要對,接著再次重新啟動Apache

步驟四:重新導向Http到Https
#

既然都已經設定好了Https,那就沒有理由讓User繼續瀏覽Http了,所以要將連線到Http的用戶直接導向Https

一樣修改上面的Apache Config

#/etc/apache2/sites-available/site1.conf

<VirtualHost *:443>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile /var/ssl/your_name.crt
    SSLCertificateKeyFile /var/ssl/your_domain_name.key
    SSLCertificateChainFile /var/ssl/boundle_name.crt

    <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
    </Directory>
</VirtualHost>

加入了RewriteEngin On 這一塊,將Http的使用者導入Https,同樣的每次修改玩Config都必須要重新啟動Apache

重新啟動完成後,這一切就大功告成啦~