1. 程式人生 > >在Mac上搭建帶ssl協議和域名指向的Apache伺服器

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

 

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

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