用 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证书