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