在Mac上搭建帶ssl協議和域名指向的Apache伺服器
- 2019 年 10 月 14 日
- 筆記
顧名思義,就是要在蘋果電腦上搭建 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 webmaster@dummy-host.example.com 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。