在Apache設定https(透過OpenSSL自簽憑證)

前言

在 Windows 使用 Apache,有很多種方式,本文會分別以 Apache Lounge 與 MAMP 為例,示範 https 設定的方法。

適用環境

前置設定

在本機(開發機)模擬正式機環境,可透過 hosts 設定網域對應到本機 IP 127.0.0.1

設定 hosts

  • 路徑 %WinDir%\System32\drivers\etc\hosts
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.

127.0.0.1   album.com

以 Apache Lounge 為例

在本文教學中,Apache 所在目錄為 C:\AMP\Apache24\

\Apache24\conf\httpd.conf 可以設定 Define SRVROOT 這個變數,簡化後續設定檔所使用的連結,如下所示

Define SRVROOT "c:/AMP/Apache24"
ServerRoot "${SRVROOT}"

透過 OpenSSL 產生憑證與金鑰

透過Apache內附的OpenSSL.exe,可產生所需的 憑證金鑰 ,在輸入指令前,需先建立設定檔 openssl.cnf

  • 在 apache 的 bin 資料夾,新增 openssl.cnf
  • 放置的路徑為 C:\AMP\Apache24\bin\openssl.cnf
[req]
prompt = no
default_md = sha256
default_bits = 2048
distinguished_name = dn
x509_extensions = v3_req

[dn]
C = TW
ST = Taiwan
L = Taipei
O = FlyStudioX
OU = IT
emailAddress = test@example.com
CN = localhost

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = album.com
  • 透過終端機輸入指令,產生憑證與金鑰

在Windows輸入指令的方式有很多種,除了可以在資料夾路徑列,輸入 cmd ,再按下 enter ,開啟命令提示字元。另外也可使用 PowerShell。

直接輸入 cmd 開啟命令提示字元,雖然方便,但缺點是沒有系統管理員權限,所以建議透過 Windows 搜尋功能,用 cmd 關鍵字找到命令提示字元後,按下滑鼠右鍵 以系統管理員身分執行,可減少因權限衍生的麻煩。

接著透過透過終端機輸入以下指令,切換到 apache 的 bin 資料夾,並產生憑證與金鑰。

cd C:\AMP\Apache24\bin\

openssl req -x509 -new -nodes -sha256 -utf8 -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -config openssl.cnf
  • 最後要複製憑證 server.crt 與金鑰 server.key,到 conf 資料夾 C:\AMP\Apache24\conf

設定 httpd-ssl.conf

憑證與金鑰就定位後,接著需要開啟 httpd-ssl.conf,確認設定檔內的路徑是否正確。

  • 設定檔路徑為 C:\AMP\Apache24\conf\extra\httpd-ssl.conf
SSLCertificateFile "${SRVROOT}/conf/server.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/server.key"

設定 httpd.conf

httpd-ssl.conf 設定無誤後,需要到 httpd.conf 啟用 SSL 相關 Module,並 Include httpd-ssl.conf ,最後設定 VirtualHost,聽取 https 的 port 443。

  • 設定檔路徑為 C:\AMP\Apache24\conf\httpd.conf
# 以下兩個Module需啟用
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

<VirtualHost *:443>
    DocumentRoot "C:\AMP\WWW\album"
    ServerName album.com
</VirtualHost>

安裝憑證

經過以上的設定,已經可順利開啟 https://album.com,但因為瀏覽器不認識這個憑證,所以在瀏覽器的網址前面會出現"不安全",為了解決這個問題,我們可以將憑證安裝到 受信任的根憑證授權單位

安裝的方式,就是用滑鼠左鍵對著 server.crt 點兩下,點選 安裝憑證 ,存放位置可選擇 目前使用者 ,接著選擇憑證存放區,將所有憑證放入以下的存放區,按下 瀏覽,並選取憑證存放區,放在 受信任的根憑證授權單位

  • 提示:若您完全按照上述方式操作,server.crt 將會位於 C:\AMP\Apache24\conf\server.crt

以 MAMP 為例

透過 OpenSSL 產生憑證與金鑰

  • 在 apache 的 bin 資料夾,新增 openssl.cnf
  • 檔案路徑 C:\MAMP\bin\apache\bin\openssl.cnf
    openssl.cnf 內容同 Apache Lounge

以下內容為會員專屬

Hi 👋 感謝您的閱讀,打擾一下…

為了持續提供優質內容與無廣告體驗,部份內容為付費會員專屬。

由於付費訂閱功能還在籌備中,若您有興趣成為會員,可以留下Email信箱,當開放訂閱時會優先通知您。

若單純對此篇文章內容感興趣,也可以私訊IGFB,搶先閱讀完整內容。

這篇文章的分類為[程式設計]