在Mac上搭建帶ssl協議和域名指向的Apache伺服器
顧名思義,就是要在蘋果電腦上搭建 Apache 伺服器,並且支援 https 協議,能用指定域名訪問(有些開發除錯需要註冊域名,比如除錯微信JS-SDK),當然最好能在手機端進行除錯。首先,Mac 系統自帶 Apache 伺服器,只需在終端輸入 sudo apachectl start 回車即可開啟 Apache,那麼我們現在先給伺服器繫結域名,然後再設定 ssl 協議,最後用 Charles 實現手機訪問。
繫結域名
1、開啟訪達編輯 /private/etc/hosts 檔案,在該檔案中新增如下程式碼,如果要繫結多個域名就新增多行,前面的 IP 不變:
127.0.0.1 www.example.com
2、開啟檔案 /private/etc/apache2/httpd.conf ,找到 Include /private/etc/apache2/extra/httpd-vhosts.conf 將其前面的井號“#”刪除,因為後面要用到 /private/etc/apache2/extra/httpd-vhosts.conf 這個檔案。
找到 DocumentRoot "......" ,在其前面加上井號“#”,我希望能夠繫結多個域名,並且不同的域名指向不同的專案,需要到 /private/etc/apache2/extra/httpd-vhosts.conf 去設定繫結,在 /private/etc/apache2/httpd.conf 裡只能繫結一個域名和專案,所以將這句登出。
在剛剛修改的地方下一行有一條 <Directory "/xxxx/xxxx/xxxx"> ,將其中引號中內容改為專案所在的地址,從這一行開始到下面的 </Directory> 結束是指定要和域名繫結的專案的,如果要指定多個專案可以在這段內容下面再複製貼上這段內容,指定幾個專案就貼上幾段,只需要修改相應的專案地址即可,下一步我們將會把域名和這些專案地址進行繫結。
3、開啟檔案 /private/etc/apache2/extra/httpd-vhosts.conf ,在末尾新增如下程式碼:
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "[你的專案地址]" ServerName www.example.com ServerAlias www.example.com ErrorLog "/private/var/log/apache2/www.example.com-error_log" CustomLog "/private/var/log/apache2/www.example.com-access_log" common </VirtualHost>
在這裡就把域名和專案繫結在一起了,如果有多個域名和專案就複製上面的程式碼,只需修改其中的域名和專案地址, sudo apachectl restart 重新啟動 Apache 伺服器後就可以通過指定的域名訪問相應的專案了。
設定 SSL 協議
1、新建資料夾 /private/etc/apache2/ssl
2、安裝 openssl:
npm install openssl
3、生成私鑰:
openssl genrsa -out server.key 2048
這樣是生成rsa私鑰,openssl格式,2048位強度。server.key是金鑰檔名,此時應該可以看到在 ssl 資料夾裡生成了檔案 server.key。
4、生成自簽名證書
openssl req -new -sha256 -x509 -days 365 -key server.key -out server.crt
req是證書請求的子命令,-sha256表示演算法,-x509表示輸出證書,-days365 為有效期,此後根據提示輸入證書擁有者資訊,可以隨便填,但 Common Name
應該與域名保持一致。完成後會在 ssl 資料夾裡生成 server.crt 檔案。
5、安裝證書:雙擊 server.crt 即可安裝證書,安裝完後會開啟鑰匙串,裡面包含很多證書和應用程式祕密,剛剛安裝好的證書也在裡面,雙擊開啟該證書 -> 點選信任左邊的三角按鈕 -> 設定“使用此證書時”的選項為“始終信任”。
6、編輯/etc/apache2/httpd.conf
檔案,搜尋下面內容,並去掉註釋符號#:
LoadModule ssl_module libexec/apache2/mod_ssl.so Include /private/etc/apache2/extra/httpd-vhosts.conf Include /private/etc/apache2/extra/httpd-ssl.conf LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
7、開啟/etc/apache2/extra/httpd-ssl.conf
檔案,去掉以下兩項註釋並檢查是否與之前安裝私鑰和證書的路徑一致:
SSLCertificateFile "/private/etc/apache2/ssl/server.crt" SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
8、編輯/etc/apache2/extra/httpd-vhosts.conf
檔案,在 末尾新增一段如下內容:
<VirtualHost *:443> SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /private/etc/apache2/ssl/server.crt SSLCertificateKeyFile /private/etc/apache2/ssl/server.key ServerName www.example.com DocumentRoot "[專案地址]" </VirtualHost>
重啟伺服器,訪問 https://www.example.com,此時會彈出安全提示,不用管點選繼續訪問即可。
配置手機訪問(手機和電腦須處於一個局域網裡)
- 開啟 Charles,選擇 幫助 -> SSL 代理 -> 在移動裝置或遠端瀏覽器上安裝Charles Root證書,此時會彈出一個視窗,記住上面的 ip 地址和埠;
- 在手機端選擇 設定 -> 無線區域網 -> 當前wifi -> 配置代理 -> 手動,輸入伺服器 ip 地址和埠,填完別忘記儲存;
- 下載 Charles 根證書: 在手機瀏覽器中開啟 chls.pro/ssl,按照提示點允許;
- 在手機端開啟 設定 -> 通用 -> 描述檔案與裝置管理 安裝剛剛下載的 Charles 證書;
- 在手機上開啟:設定 -> 通用 -> 關於本機 -> 證書信任設定,找到剛剛安裝的 Charles 證書將其設為信任;
- 開啟手機瀏覽器,訪問 https://www.example.com。