用 mkcert 為 Apache 建立 vhost 的 SSL 安全連線

在本機端測試的時候,如果有連到遠端 https 來源資源的需求,可能會愈到連線的限制,因為遠端資源會將 http 視為不安全的連線因而拒絕連線請求,此時若能為 localhost 產生一個 SSL 連線的偽裝,就可以方便的載入這些資源,並且也能更接近實際上線後 https 的連線情況。

利用 mkcert 這套工具,就可以在電腦中製作一份本地的證書,因此就可以利用此證書來為自己本機上的各種域名建立 https 的安全連線啦!

安裝憑證建立工具

首先我們需要利用 homebrew 來安裝憑證產生工具,如果沒有 homebrew 記得先去安裝。

brew install mkcert

製作 SSL 憑證

接著我們要先利用這個工具產生本機的 CA。

mkcert -install

然後就可以來製作本機網域用的安全憑證,可以一次製作多個網域用的

mkcert example.com "*.example.org" myapp.dev localhost 127.0.0.1 ::1

做好後會在同資料夾內產生 2 個憑證檔案,分別是 certificate 的 example.com+5.pem檔案跟金鑰的example.com+5-key.pem

有了這兩個檔案,就可以開始為我們的虛擬伺服器建立安全連線啦!

建立安全連線

在 Apache 伺服器中,虛擬伺服器是利用 vhost 設定檔來實現,因此現在我們一樣要來到這裡新增安全連線設定。

sudo vi /etc/apache2/extra/httpd-vhosts.conf

在最下面加入以下設定

<VirtualHost *:443>
    DocumentRoot "/Library/WebServer/Documents"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "/path/to/example.com+5.pem"
    SSLCertificateKeyFile "/path/to/example.com+5-key.pem"
</VirtualHost>

再重新啟動伺服器,就好。

參考資料

  1. FiloSottile/mkcert
  2. 使用mkcert生成本地HTTPS证书