主機環境更新實錄 (4) – SSL 篇


Https 的設定其實也不是說非常必要,但每次進自己網站就看到一個紅色的不安全掛在那邊,看著看著渾身就不舒適了起來,所以就來研究看看要怎麼掛上憑證。

首先先到 SSL for Free 申請憑證,基本上照著步驟做、驗證信箱就可以。免費版最多可以申請三個網域,如果要 wildcard (包含所有子網域)的話就得要付費了。另外免費版必須要三個月更新一次憑證。

申請成功之後會取得金鑰的檔案,第一件事情當然就是要放到主機裡面:

scp -r ~/sample user@ip:/tmp

如果是 nginx,需要執行以下指令將憑證合併在一起:

cat certificate.crt ca_bundle.crt > certificate.merge.crt

記得要將憑證檔案放到 docker 映射的資料夾裡面。

nginx

接著修改 nginx 的設定檔,如果進到 http (80 port),會重導向到 443,並且加入 SSL 的設定,敬請注意 domain-b nginx 也一樣要加上憑證的設定,否則會有不安全連線或是憑證錯誤的提示。

server {  
  listen      443 ssl;  
  server_name domain.tw;  
  root   /usr/share/nginx/html;

  ssl on;
  ssl_certificate /etc/nginx/ssl/certificate.merge.crt;
  ssl_certificate_key /etc/nginx/ssl/private.key;

  // 下略各種設定
}
server {
   listen       80;
   server_name  domain.tw;
   return 301 https://$server_name$request_uri;
}

#domain-B
server {
   listen       443 ssl;
   server_name  domain-b.domain.tw;
   
   ssl on;
   ssl_certificate /etc/nginx/ssl/certificate.merge.crt;
   ssl_certificate_key /etc/nginx/ssl/private.key;

   location / {
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_pass https://{hostIP}:8001;
   }
}
server {
   listen       80;
   server_name  domain-b.domain.tw;
   return 301 https://$server_name$request_uri;
}

apache

由於 wordpress 的部分是使用 apache,在 apache 的設定檔中加上 SSL 的方式如下:

000-default.conf
<VirtualHost *:80>
  ServerName domain-c.domain.tw
  ServerAdmin admin@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<IfModule mod_ssl.c>
  <VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile       /etc/ssl/certificate.crt
    SSLCertificateKeyFile    /etc/ssl/private/private.key
    SSLCertificateChainFile  /etc/ssl/ca_bundle.crt

    ServerName domain-c.domain.tw
    ServerAdmin admin@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
  </VirtualHost>
</IfModule>
default-ssl.conf
<VirtualHost *:443>
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  SSLEngine on
  ServerName domain-c.domain.tw
  SSLCertificateFile       /etc/ssl/certificate.crt
  SSLCertificateKeyFile    /etc/ssl/private/private.key
  SSLCertificateChainFile  /etc/ssl/ca_bundle.crt

  <FilesMatch "\.(cgi|shtml|phtml|php)$">
          SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
          SSLOptions +StdEnvVars
  </Directory>
</VirtualHost>

最重要的一步,進入 container,並執行:

a2enmod ssl

完成之後重新啟動機器即可套用設定。


參考資料:


主機環境更新實錄:

  1. 主機環境更新實錄 (1) – 前情提要篇
  2. 主機環境更新實錄 (2) – Docker 篇
  3. 主機環境更新實錄 (3) – DNS 及轉導篇
  4. 主機環境更新實錄 (4) – SSL 篇
  5. 主機環境更新實錄 (5) – WP 篇
  6. 主機環境更新實錄 (6) – 完結篇

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *