2016年3月23日 星期三

如何在 MAC OS X 上開啟 Apache 的 SSL 支援(OpenSSL)

Mac 與 OSX 是非常棒的平台。
對於一般使用者使用上很簡單,沒有 Windows 上這麼多繁瑣的事情與中毒等等複雜的問題。
對於開發者來說,除了韌體跟Microsoft solution 之外,其他的都很方便,像是:Java/PHP/Ruby/C/C++,不管是 Web/Mobile 都是。
我想光是不會中毒跟當機就讓我很愛了!

但是對於開發者來說設定一直都是比較多問題的,因為得要手動做很多的事情。
OpenSSL 的設定我想就是讓很多人煩惱的一件事情,預設上 OSX的 Apache 是沒有 SSL Enablea的。

安裝跟設定 SSL有下面幾個步驟

  1. OpenSSL 安裝與設定
  2. Apache SSL Enable 的設定方式
  3. 測試&完工

需要的軟體有兩個

  1. OpenSSL (下面的步驟會有下載的地方)
  2. Apache (OSX已經內載了)

接下來就跟著一步步來吧!

OpenSSL 的安裝與設定

打開你的 Termal 然後輸入下列的指令
  1. 切換到本機暫存原始碼的目錄,然後下載 OpenSSL 原始碼
    cd /usr/local/src
    curl --remote-name http://www.openssl.org/source/openssl-1.0.2g.tar.gz
  2. 解壓縮後進入到原始碼目錄內
    tar -xzvf openssl-1.0.2g.tar.gz
    cd openssl-1.0.2g
    
  3. 設定/編譯然後進行安裝,下面的設定會安裝到 /usr/local/openssl-1.0.2g 目錄下
    ./configure darwin64-x86_64-cc --prefix=/usr/local/openssl-1.0.2g
    make depend
    make install
    
  4. 製作一個 openssl 的連結,如此做可以讓以後在更版的時候簡單點
    ln -s openssl-1.0.2g /usr/local/openssl
    
  5. 設定環境變數後讀取新的設定
    echo 'export PATH=/usr/local/openssl/bin:$PATH' >> ~/.bash_profile
    echo 'export MANPATH=/usr/local/openssl/ssl/man:$MANPATH' >> ~/.bash_profile
    source ~/.bash_profile
    
  6. 安裝憑證
    security find-certificate -a -p /Library/Keychains/System.keychain > /usr/local/openssl/ssl/cert.pem
    security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> 
    /usr/local/openssl/ssl/cert.pem
    
  7. 測試安裝
    openssl version -a
  8. 如果出現錯誤則需要以照錯誤的訊息去做修正,如果看到正確的版本資訊那代表安裝成功

OpenSSL 成功安裝後的版本資訊

製作憑證

  1. 製作金鑰
    $ cd /etc/apache2
    $ sudo ssh-keygen -f server.key
    
  2. 產生憑證簽章需要的檔案
    $ sudo openssl req -new -key server.key -out server.csr
    
  3. 使用CSR去製作憑證
    $ sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    
  4. 製作RSA金鑰
    $ sudo openssl rsa -in server.key -out server.key
    

設定並啟動 Aapche 的 SSL 支援

下面只針對 SSL 設定步驟做描述
  1. 打開你的 Termal 執行指令修改 httpd.conf
    sudo nano /etc/apache2/httpd.conf
    
    將下列幾行的註解符號刪除後儲存(儲存的熱鍵是 control + x 然後選 Y)
    
    LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
    LoadModule ssl_module libexec/apache2/mod_ssl.so
    
  2. 編輯設定檔來打開 HTTPS 支援
        DocumentRoot "/Users/your_user/Sites"
        ServerName localhost
        SSLEngine on
        SSLCertificateFile "/private/etc/apache2/server.crt"
        SSLCertificateKeyFile "/private/etc/apache2/server.key"
    
  3. 測試 Apache 的設定,如果沒問題就重新啟動 Apache
    $ sudo apachectl configtest
    $ sudo apachectl -k restart
    
  4. 開啟瀏覽器打開 https://localhost/~{YOUR USERNAME} 測試看看