在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,此時會彈出安全提示,不用管點擊繼續訪問即可。

 

配置手機訪問(手機和電腦須處於一個區域網里)

  1. 打開 Charles,選擇 幫助 -> SSL 代理 -> 在移動設備或遠程瀏覽器上安裝Charles Root證書,此時會彈出一個窗口,記住上面的 ip 地址和埠;
  2. 在手機端選擇 設置 -> 無線區域網 -> 當前wifi -> 配置代理 -> 手動,輸入伺服器 ip 地址和埠,填完別忘記存儲;
  3. 下載 Charles 根證書: 在手機瀏覽器中打開 chls.pro/ssl,按照提示點允許;
  4. 在手機端打開 設置 -> 通用 -> 描述文件與設備管理 安裝剛剛下載的 Charles 證書;
  5. 在手機上打開:設置 -> 通用 -> 關於本機 -> 證書信任設置,找到剛剛安裝的 Charles 證書將其設為信任;
  6. 打開手機瀏覽器,訪問 https://www.example.com。