標籤:out 簡單 hack 自己的 cer 介紹 訪問 防火牆 點擊
關於 HTTPS 的基本原理大家都已經不再陌生,今天和大家說說如何搭建一個支援 HTTPS 的服務端。
服務端的 HTTPS
HTTPS 已經幾乎成為了當前互連網推薦的通訊方式,它能最大化保證資訊傳輸的安全,從去年蘋果的強制 HTTPS ,到如今各大網站都支援了 HTTPS。它會越來越普及。
之前寫過幾篇關於 HTTPS 原理的文章,有使用者留言希望瞭解一些如何在服務端搭建 HTTPS 服務的內容,這次就和大家聊聊這個話題。
SSL 憑證
搭建一個 HTTPS 網站,第一步要做的就是申請 SSL 憑證, 而且要在標準的憑證授權單位來申請。 當然,從技術上來說,你可以使用自我簽署憑證,但自我簽署憑證會被所有的瀏覽器視為不安全的認證,並且會給使用者報錯,就像這樣:
所以,還是需要申請一個正規的認證的。 可申請認證的頒發機構有很多,比如 GoDaddy,Comodo,Verisign 等等。價格從一年幾美金到幾十美金不等。
我們就以 GoDaddy 為例,帶大家瞭解一下流程。 在 GoDaddy 的首頁有一個 Web Security 標籤,點擊這個標籤後可以找到 SSL Certificates 選項:
點擊進去, 就可以看到可選的幾個認證形式,有單網域名稱的,還有允許多個次層網域的等:
避免廣告嫌疑,下面的價格資訊略去了~,這裡只給大家介紹流程,協助大家瞭解。 認證服務商大家可以自行選擇。
接下來,憑證授權單位會讓你填寫一個叫做 CSR 的東西, 如果大家搞 iOS 開發對這個應該不陌生,申請蘋果開發人員認證的時候大家也做過類似的事情。
CSR 全稱 Certificate Signing request。 顧名思義就是用於申請認證必須的一些資訊,在 Lunix 系統中,它可以通過命令產生(大多數的服務端應該都是基於 Linux 的,所以我們用它來作為例子):
$ openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr
openssl 命令,如果你的系統沒有安裝的話,可以通過包管理先安裝。 需要把這裡面的 yourdomain.key 和 yourdomain.csr 替換成你自己的名稱,可以是網域名稱,也可以是其他標識。
產生成功後,可以用 cat 命令輸出 yourdomain.csr 中的內容:
$ cat yourdomain.csr
會在命令列輸出 CSR 的內容,把這段內容複寫到前面中的文字框中,然後點擊產生就好了。
注意,這裡的 yourdomain.key 檔案你要保管好。 這是你認證的私密金鑰,後面配置 HTTPS 的時候需要用到它。 並且它不能重建,而且不能泄露出去。原因可以參考我前面關於 HTTPS 原理的相關文章。
與此同時,憑證授權單位在你提交 CSR 之後,會給你產生認證檔案, Godaddy 會產生兩個認證,一個是你網站的認證,一個是根憑證。 把它們下載到你的伺服器上面。
Apache 服務端配置
認證準備好之後,我們要對服務端程式進行配置,讓它支援 HTTPS。這裡我給大家以 CentOS 7 作業系統, Apache 2.x 服務端程式為例。
Apache 的 HTTPS 設定檔一般在 /etc/httpd/conf.d/ssl.conf 這個位置。 用 vim 編輯器開啟它, 然後加入這樣一個節點:
<VirtualHost *:443> SSLEngine On SSLCertificateFile /root/yoursite.crt SSLCertificateKeyFile /root/yoursite.key SSLCACertificateFile /root/rootcert.crt ServerAdmin [email protected] ServerName yoursite.com DocumentRoot /var/www/html/</VirtualHost>
這裡用到了我們前面準備的認證和秘鑰。 SSLCertificateFile 是你網站的認證, SSLCACertificateFile 是根憑證, SSLCertificateKeyFile 是只儲存在你伺服器的私密金鑰。
有了這些資訊後,Apache 就可以正確的處理 HTTPS 請求了。 在這之前我們還需要在做最後一步操作, 編輯 /etc/httpd/conf/httpd.conf 檔案, 這個是 Apache 的主設定檔, 加入這樣一行:
Listen 443
這個是讓你的服務端同時監聽 443 連接埠。 因為 HTTPS 的預設連接埠是 443, 所以這個設定是必須要有的。
一切都就緒後,重啟你的伺服器:
systemctl restart httpd
然後再用瀏覽器輸入 https://yoursite.com 訪問你的網站時,就應該可以看到 HTTPS 驗證成功的小鎖頭了。
防火牆設定
如果配置都就緒,你重啟了之後,依然不能正常訪問,有可能是你的防火牆把 443 連接埠攔截了,把它開啟:
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPTiptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT結束
目前成熟的 Web 服務程式都有對 HTTPS 很好的支援,只需要經過簡單的配置,即可完成 HTTPS 伺服器的搭建。 而 HTTPS 之所以相對效能消耗更大,是因為每次資料轉送都需要進行加密和解密的操作。 作為 APP 開發人員們,可能對服務端的技術瞭解的並沒有那麼深,可以把它作為一個備忘錄,日後用到的時候再來看看。
如果你覺得這篇文章有協助,還可以關注公眾號 swift-cafe,會有更多我的原創內容分享給你~
聲明:本文搜集整理自互連網,著作權歸原作者所有,文中所述不代表本站觀點,若有侵權或轉載等不當之處請聯絡我們處理,請我們一起為維護良好的互連網秩序而努力,謝謝!連絡方式見網站首頁右下角。
如何搭建一個 HTTPS 服務端