讓你的 apache支援ssl
Apache支援SSL ,完成了基礎架站之後,如果有設定SSL 讓你的Apache 可以透過Https連線的需求可直接參考以下做法
首先您必須先購買ssl憑證,購買憑證其實不難只是等級分非常多,簡單分辨的方法呢,如果你的網站沒有金流串接,那麼基本上不會有太大的問題
國內購買憑證有很多管道,只是單價不怎麼便宜,國外的便宜許多,只是礙於網站是全英文的也許很多人會卻步,個人是習慣在Godaddy直接購買SSL 或者是網址
除了網站是中文的比較親民以外,價格上也不算太貴而且設定很方便喔!
如果順利購買完成應該就會看到像這樣子的畫面
那麼SSL 憑證購買完成後,接下來就讓我們來看看如何設定Apache 吧
步驟一 :產生CSR
CSR是產生伺服器的認證檔案,每一台伺服器都是唯一的,因此如果日後網站換了伺服器(無論是換到Apache 或者IIS )就必須要重新產生CSR再與憑證商重新認證下載憑證
1 |
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomainname.key -out yourdomainname.csr |
接下來會有一大段的提示,請依照您的網站資料填寫即可,完成後會產生兩個檔案*.key以及*.csr
這時您必須打開csr將內容提交給憑證廠商用於下載憑證檔
1 |
sudo nano your_domain.csr |
內容大致上會類似這樣子,會是一段看不懂的亂碼,只要將其中的文字全數複製起來依照憑證商的指示繼續操作就可以了
步驟二 :打開Apache 的SSL mode,並重新啟動Apache
1 2 |
sudo a2enmod ssl sudo service apache2 restart |
步驟三 :設定Apache config
將我們剛剛產生的key以及從憑證商下載的crt檔 bundle檔收好,此範例會放在/var/ssl/ 這個資料架底下,接著修改Apache config檔
我們就拿上次的範例來看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#/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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#/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
重新啟動完成後,這一切就大功告成啦~
首頁 » 技術文章 » 架站 » 讓你的 apache支援ssl